feat: Z38 grant Yuheng agents ready-to-use access

Complete permissions during every bind and token path, expose effective access in the console, and keep the platform return path globally available.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
whm
2026-08-07 16:11:13 +08:00
parent 4f9087bd38
commit 43dc708f1e
11 changed files with 285 additions and 145 deletions

View File

@@ -1,6 +1,6 @@
# 联调后修改意见 · 宇恒松离线(形态 B
> 初稿2026-08-01 · 修订至 **2026-08-07**+Z37 SyncPage LWW 403 体验
> 初稿2026-08-01 · 修订至 **2026-08-07**+Z38 返回上一级/智能体权限
> 焦点:**§0.2**(按负责方);**改代码前须先写入本意见**(见 §0.0
> 来源:宇恒 `yuhengyihao_client` ↔ 智建(生产 `aisite.yuxindazhineng.com`
> 依据:`松离线-dbsync方案-最终版.md`、`宇恒-松离线数据同步使用文档.md`
@@ -33,6 +33,7 @@
| **Z35 库名非法中文** | **智建已落实(须生产 pull** | 绑定/AttachSyncBind/heal 纠正publish 拒非法名§5.33**宇恒勿改** |
| **Z36 编辑发布无增量** | **智建已落实(须生产 pull** | 无增量 + `host_meta.module_name``host_meta_updated`;否则中文 `[NO_BLUEPRINT_DELTA]`§5.34 |
| **Z37 SyncPage LWW 403 吓人** | **智建已落实(须生产 pull** | SyncPage 无冲突队列;中性提示 + 空通道说明conflicts 403 静默§5.35 |
| **Z38 绑定即用 + 返回上一级** | **智建已落实(须生产 pull** | 绑定自动并集补齐建站权限并回传超管公司视图全局可返回平台§5.36 |
| **仍关注** | 用法 | 通道断了靠智建自愈;表数据靠宇恒双向指纹 / 数据恢复;不是「再点启动」 |
### 0.0 修改流程(冻结)
@@ -103,6 +104,7 @@
| **Z35** | 绑定 `database_name=user_{id}`publish 拒绝中文库名并纠正脏数据;见 §5.33 |
| **Z36** | merge 无增量:有 `host_meta.module_name``publish_mode=host_meta_updated`;否则中文 `[NO_BLUEPRINT_DELTA]`;见 §5.34 |
| **Z37** | SyncPage 无冲突队列;中性 LWW 说明 +「该公司暂无通道」空态;`listSyncConflicts` 403 静默;见 §5.35 |
| **Z38** | 宇恒各绑定/恢复路径并集补齐 9 项建站权限;回执/Token 可验;全局返回平台;智能体列表展示权限;见 §5.36 |
> 产品一句:**账号已绑定 ⇒ 落点信息固定;通道没了平台自动补,终端无需手填 channel_id。**
@@ -110,7 +112,7 @@
| 优先级 | 编号 | 项 | 说明 |
|--------|------|----|------|
| — | — | Z36/Z37 已合入见 B | 当前无待开发项;运维见 B |
| — | — | Z38 已合入见 B | 当前无待开发项;运维见 B |
#### B‴. 智建 · 本次明确不改Z15
@@ -126,7 +128,7 @@
| 优先级 | 项 | 说明 |
|--------|----|------|
| **P0** | **生产 pull 本批** | Z10d + fingerprint + Z14c + **Z12h** + **数据恢复** + **Z34b** + **Z35** + **Z36** + **Z37**`bash ./restart.sh --pull` |
| **P0** | **生产 pull 本批** | Z10d + fingerprint + Z14c + **Z12h** + **数据恢复** + **Z34b** + **Z35** + **Z36** + **Z37** + **Z38**`bash ./restart.sh --pull` |
| **P0** | 成员手机 | 「宇信达」绑 **`13531041944`**;勿超管号 |
| **P0** | 通道表白名单 | **勿**「填入测试默认」;形态 B 可空 |
| **P1** | 凭票 Secret | `YuhengTicket.Secret``YXD_YUHENG_TICKET_SECRET` |
@@ -1198,9 +1200,64 @@ POST /api/v1/agent/sync/channels/{id}/pull
2. 该公司确有通道时列表可见;无通道时空态说明清楚,不报权限错误。
3. 平台租户页「LWW 覆盖日志」仍可查审计;公司侧 conflicts 接口保持 403契约不变
### 5.36 【Z38 · 2026-08-07】宇恒绑定后须直接可用超管进公司须能返回上一级
**状态****智建已落实(须生产 pull宇恒已改提示文案**。
#### 现象
1. 宇恒绑定成功后仍提示智能体未开「读取模块」(app.read),不能列模块;用户还要进智建后台编辑权限。该流程不符合产品约定:**绑定成功即完成开通,后续不得依赖管理后台人工补权限**。
2. 平台超管点「管理该公司」后进入侧栏「智能体账号 / 数据同步」等页时,**顶栏只有橙色「管理xxx」Tag**,没有「返回上一级 / 返回平台工作台」;该按钮目前只在「平台工作台 · 公司总览」页内、且仅当仍停在该页时可见。
#### 根因
| 点 | 说明 |
|----|------|
| **绑定权限不完整** | 绑定/凭票路径 `ensureAgentSyncPerm` 目前**只保证「数据同步」**;绑定码 `RedeemBindCode` 甚至未调用该补权函数。宇恒建站技能还需模块、数据和文件权限,因此绑定虽然成功,`GET /api/v1/apps` 仍会因缺 `读取模块` 而 403。 |
| **返回按钮位置** | `PlatformTenantsPage` 有「返回平台工作台」(`exitPlatformTenant``ConsoleLayout` 顶栏在进公司后未放同款按钮,离开公司总览页后用户找不到返回。 |
#### 智建改(已落实)
1. **绑定即用P0 · 必须)**:把 `ensureAgentSyncPerm` 改为语义明确的 `ensureYuhengAgentPerms`(名字可自定),以**并集追加、不得覆盖/删除已有权限**的方式保证宇恒建站权限包:
`读取模块``写入模块``发布模块``查询数据``新增数据``导入数据``上传文件``下载文件``数据同步`
若技能后续支持修改/删除行,再按功能追加 `更新数据` / `删除数据`,不要预先给无关管理权限。
2. **覆盖全部绑定/恢复入口P0**:以下路径在返回成功、签发/轮换 token 或 secret **之前**均须调用同一补权函数,失败则整体返回失败,不得 `_ =` 静默忽略:
- 宇恒凭票换票 `YuhengTicketExchange`
- 手机确认绑定 `ConfirmPhoneBind`
- 绑定码兑换 `RedeemBindCode`
- 换机恢复 `RestoreByYuhengHost`
- 对已有 `sync_bound` 智能体换票/恢复时也须补齐,以自动修复存量缺权账号。
3. **回执可验证P0**:绑定/换票/恢复响应增加 `permissions`(或 `perms`数组返回最终有效权限token claims 必须包含同一权限集合。成功 message 使用「绑定并授权完成」,不能只写「同步已绑」。
4. **存量自愈P0**:生产 pull 后,存量宇恒智能体无需逐条后台编辑;其下一次凭票换票、手机号确认或 restore-by-host 自动补权。可另提供一次性迁移/管理命令,但不能把人工后台操作作为正常流程。
5. **全局返回P0**`ConsoleLayout`(或所有公司侧页顶栏)在「超管 + 已 enter 某公司」时固定展示按钮 **「返回平台工作台」/「返回上一级」**,调用已有 `exitPlatformTenant`,回到平台公司总览。
6. **权限可见性P1**`AgentUsersPage` 增加「权限」列/Tag展示至少「读取模块、发布模块、数据同步」这是诊断能力**不能替代绑定自动授权**。
#### 落实记录2026-08-07
- `ensureYuhengAgentPerms` 对现有权限做并集追加,保证 9 项宇恒建站权限并激活账号,不删除已有权限;补权写库失败时绑定/换票直接失败。
- `ticket-exchange`、手机号确认、绑定码兑换、`restore-by-host` 及已绑定账号的 `client_credentials` 换票均在轮换密钥/签发 Token 前补权;恢复路由已接回,回执返回最终 `permissions`,成功文案统一为「绑定并授权完成」。
- `ConsoleLayout` 在平台超管进入公司上下文后固定显示「返回平台工作台」,任意公司侧页面均可退出管理视图。
- `AgentUsersPage` 增加权限 Tag 列,便于核对「读取模块、发布模块、数据同步」等有效权限。
#### 宇恒
已改缺权提示,明确平台授权未完成;宇恒不再把「后台人工勾选」定义为正常开通步骤。接口成功后直接继续模块操作。
#### 临时联调绕过(仅 Z38 上线前)
智建后台人工勾权限仅供当前联调临时解阻,**不得写入正式用户操作流程**。正式流程必须是宇恒绑定成功后直接列模块、生成、发布、导入和查询。
#### 验收
1. 新账号从宇恒完成任一绑定方式后不登录智建后台token 已含上述权限包;可直接 `GET /apps`、生成/发布、导入、查询和上传/下载。
2. 历史仅有「数据同步」的账号,下一次换票/恢复自动补齐权限,无需后台编辑。
3. 任一补权写库失败时绑定/换票明确失败,不得返回“绑定成功”后再由业务接口 403。
4. 超管「管理该公司」后,无论停在智能体/同步/模块哪一页,顶栏均可一键回平台工作台。
5. 智能体列表可见权限,但用户正常使用不依赖该页面。
## 6. 联系与附件
- **待改清单(优先看)**§0.2**A 宇恒接入 restore-by-host · B 运维 pull****改代码前先写本意见**§0.0);配合见 **§0.3**
- **待改清单(优先看)**§0.2当前开发项已清;**B 运维 pull**);配合见 **§0.3**
- 方案:`松离线-dbsync方案-最终版.md`(含 2026-08-01 联调建议落地记录)
- 宇恒使用说明:`宇恒-松离线数据同步使用文档.md`(含 Z10 schema/ensure、Z13 绑定)
- 开通说明:`docs/数据同步-开通说明.md`(含 **数据恢复**