docs(02-02): docs/修改记录.md 顶部追加 Phase 2 条目

- 在 line 26 锚点注释之后、Phase 1 条目之前插入 [2026-05-08] Phase 2 条目
- 完整 7 字段结构:元信息行(配套服务端 Phase + 覆盖前端需求 CRED-FE-02/03)+ 文件路径 + 修改类型 + 修改内容 + 修改原因 + 跨项目联动 + 服务端联动
- 跨项目联动字段逐字与 02-CONTEXT.md 锁定一致(无新跨项目契约 / 后端 46d72b8 互引仍有效 / Phase 3 再评估)
- 纯追加 +32 行,0 删除,line 1-26 头部完全不变
- Phase 1 及更早历史条目逐字未动
This commit is contained in:
pmc 2026-05-08 11:50:13 +08:00
parent 15e725a32f
commit 2be1f1d505

View File

@ -25,6 +25,38 @@
<!-- 新的修改记录添加在此处下方,最新的在最前面 --> <!-- 新的修改记录添加在此处下方,最新的在最前面 -->
### [2026-05-08] Phase 2前端RBAC 收敛 + AI 模型页凭据槽位入口
配套服务端 Phase本 phase **不**触达服务端;与服务端 v1.0 Phase 2「管理端读写接口」commit `46d72b8` 既有契约保持兼容(不引入新契约)
覆盖前端需求CRED-FE-02、CRED-FE-03
- **文件路径**
- `lib/permissions.ts`(修改)
- `app/ai-model/page.tsx`(修改)
- **修改类型**: 修改(前端 RBAC 矩阵扩展 + 页面入口控件 + 占位 Dialog纯前端无新依赖、不动 lockfile
- **修改内容**:
- `lib/permissions.ts`
- `PermissionModule` union 末尾追加 `"credential-slot"`,扩为 14 项
- `PERMISSION_MATRIX["超级管理员"]` 数组末尾追加 `"credential-slot"`
- `PERMISSION_MATRIX["AI模型管理员"]` 数组末尾追加 `"credential-slot"`
- 其他 4 个角色(内容管理员 / 卡牌管理员 / 查看者 / 管理员)数组**逐字不变**
- `getModuleFromPath` 函数体完全不动(凭据槽位是 `/ai-model` 子能力,不占独立路由)
- 顶部「权限矩阵对照表」注释新增一行「凭据槽位」与代码同步
- `app/ai-model/page.tsx`
- 文件 line 1 顶部新增 `"use client"` 指令,从 Server Component 转为 Client Component
- 新增 import`useState` / `useEffect`react+ `Dialog` / `DialogContent` / `DialogDescription` / `DialogHeader` / `DialogTitle`@/components/ui/dialog+ `KeyRound`lucide-react+ `hasPermission`@/lib/permissions
- 函数体顶部新增 `mounted` + `isCredentialDialogOpen` 两个 `useState` + 1 个 `useEffect``mounted` 为 true复用 `components/sidebar.tsx` mounted 守卫模式避免 SSR 水合不匹配)
- `DashboardHeader` 内部用 `<div className="flex items-center gap-2">` 包两个 Button保留原有「添加新模型」+ 新增 `{mounted && hasPermission("credential-slot") && <Button variant="outline" onClick={() => setIsCredentialDialogOpen(true)}><KeyRound /> 凭据槽位</Button>}`
- `</Tabs>` 之后、`</DashboardShell>` 之前新增 controlled mode `<Dialog open={isCredentialDialogOpen} onOpenChange={setIsCredentialDialogOpen}>`,内含 `DialogTitle`「通用凭据槽位」+ `DialogDescription`「对话框真实内容由 Phase 3 落地」(占位,无表单)
- Tabs / TabsContent / Card / 卡片内的现有按钮等所有内容line 18-441逐字不变
- **修改原因**:
- 推进 Milestone v1.0「通用凭据槽位前端集成」第二步:让授权运营立即看到入口(已就位的 UX 收敛未授权角色彻底看不到DOM 中完全不存在的安全前置)
- 沿用 RBAC 单一来源原则(`lib/permissions.ts:hasPermission`+ shadcn Dialog primitive不重复造轮子
- 为 Phase 3 真实表单CRED-FE-04 + CRED-FE-05预留 Dialog 挂载点Dialog 用 controlled mode 让 Phase 3 可在打开瞬间触发 `getCredentialSlot()`
- 注意:前端 RBAC 仅是 UI 礼貌,最终安全闭环依赖后端 `/v1/admin/credential-slot/` 的 admin 鉴权PERM-06 / `qy_lty` 后端);本 phase 不消化该闭环
- **跨项目联动**: 无 — Phase 2 是纯前端 RBAC + UI 入口落地,不引入新跨项目契约;后端 commit 46d72b8 已建立的互引仍有效Phase 3 引入实质 PUT 调用时若涉及新契约再评估
- **服务端联动**: 同上「跨项目联动」字段;后端 commit `46d72b8` 已建立互引闭环,本 phase 无需再次互引
### [2026-05-08] Phase 1前端凭据槽位 API 客户端 ### [2026-05-08] Phase 1前端凭据槽位 API 客户端
配套服务端 Phase[../qy_lty/.planning/phases/02-admin-rest/](../../qy_lty/.planning/phases/02-admin-rest/)已落地commit 46d72b8 配套服务端 Phase[../qy_lty/.planning/phases/02-admin-rest/](../../qy_lty/.planning/phases/02-admin-rest/)已落地commit 46d72b8