diff --git a/qy-lty-admin/docs/修改记录.md b/qy-lty-admin/docs/修改记录.md index 1471059..d184f77 100644 --- a/qy-lty-admin/docs/修改记录.md +++ b/qy-lty-admin/docs/修改记录.md @@ -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` 内部用 `
` 包两个 Button:保留原有「添加新模型」+ 新增 `{mounted && hasPermission("credential-slot") && }` + - `` 之后、`` 之前新增 controlled mode ``,内含 `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 客户端 配套服务端 Phase:[../qy_lty/.planning/phases/02-admin-rest/](../../qy_lty/.planning/phases/02-admin-rest/)(已落地,commit 46d72b8)