From 2be1f1d505f17ab1851be5e4c57ba04ee243f502 Mon Sep 17 00:00:00 2001 From: pmc <740076875@qq.com> Date: Fri, 8 May 2026 11:50:13 +0800 Subject: [PATCH] =?UTF-8?q?docs(02-02):=20docs/=E4=BF=AE=E6=94=B9=E8=AE=B0?= =?UTF-8?q?=E5=BD=95.md=20=E9=A1=B6=E9=83=A8=E8=BF=BD=E5=8A=A0=20Phase=202?= =?UTF-8?q?=20=E6=9D=A1=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 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 及更早历史条目逐字未动 --- qy-lty-admin/docs/修改记录.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) 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` 内部用 `