feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
This commit is contained in:
@@ -1,23 +1,24 @@
|
||||
# **<EFBFBD><EFBFBD><EFBFBD>銝舘<EFBFBD><EFBFBD>脖<EFBFBD>蝟餅4<EFBFBD><EFBFBD>𥁒<EFBFBD>?\- 摰⊥䰻<E28AA5>漤<EFBFBD>銝𦒘耨甇<E880A8>遣霈?*
|
||||
# **权限与角色体系梳理报告 \- 审查反馈与修正建议**
|
||||
|
||||
摰⊥䰻撖寡情嚗?00-<2D><><EFBFBD>銝舘<E98A9D><E88898>脖<EFBFBD>蝟餅4<E9A485><EFBC94>𥁒<EFBFBD>蹾_v1.0.md
|
||||
撖寞<EFBFBD><EFBFBD>箏<EFBFBD>嚗?07-餈鞱𨯫銝擧㦤<E693A7><E3A6A4>恣<EFBFBD><E681A3>垢PRD\_v2.1.md
|
||||
摰⊥䰻蝏栞捏嚗?<3F>颱<EFBFBD><E9A2B1>朞<EFBFBD> (Approved with Modification)<EFBFBD><EFBFBD>抅蝖<EFBFBD><EFBFBD>嗆<EFBFBD>霈曇恣<EFBFBD>𤾸<EFBFBD>嚗屸<EFBFBD>銵亙<EFBFBD>撠煾<EFBFBD><EFBFBD><EFBFBD>笆銝𡁜𦛚<EFBFBD>箸艶嚗<EFBFBD>龫<EFBFBD>a<EFBFBD>憸腈<EFBFBD><EFBFBD>rompt靚<EFBFBD><EFBFBD>嚗厩<EFBFBD>摮埈挾霈曇恣<EFBFBD>?
|
||||
## **1\. <20>詨<EFBFBD><E8A9A8>桅<EFBFBD>銝𤾸榆頝嘥<E9A09D><E598A5>?(Gap Analysis)**
|
||||
审查对象: 00-权限与角色体系梳理报告\_v1.0.md
|
||||
对比基准: 07-运营与机构管理端PRD\_v2.1.md
|
||||
审查结论: 总体通过 (Approved with Modification)。基础架构设计扎实,需补充少量针对业务场景(医院配额、Prompt调试)的字段设计。
|
||||
|
||||
<EFBFBD>賜<EFBFBD> v1.0 <20>亙<EFBFBD><E4BA99><EFBFBD>遣鈭<E981A3><E988AD>摰䂿<E691B0> RBAC <20>箇<EFBFBD>嚗䔶<E59A97><E494B6>冽𣈲<E586BD>?PRD v2.1 <20><>鸌摰帋<E691B0><E5B88B>∪㦤<E288AA>舀𧒄嚗<F0A79284><E59A97><EFBFBD>其誑銝讠撩憭梧<E686AD>
|
||||
## **1\. 核心问题与差距分析 (Gap Analysis)**
|
||||
|
||||
### **1.1 蝻箏仃<E7AE8F>𦦵移蝏<E7A7BB><E89D8F><EFBFBD>漤<EFBFBD><E6BCA4><EFBFBD><EFBFBD><EFBFBD>脲芋<E884B2>?(Critical)**
|
||||
虽然 v1.0 报告构建了坚实的 RBAC 基础,但在支撑 PRD v2.1 的特定业务场景时,存在以下缺失:
|
||||
|
||||
* **<2A>啁𠶖**嚗𡁏𥁒<F0A1818F>𠹺葉霈曇恣鈭?tenant\_quotas 銵剁<E98AB5><E58981>衤撮<E8A1A4>舫<EFBFBD>撖寧<E69296><E5AFA7>瑞<EFBFBD><E7919E>駁<EFBFBD>憸腈<E686B8>?
|
||||
* **PRD 閬<><E996AC>**嚗𡁜龫<F0A1819C>Y垢<EFBCB9><E59EA2>閬<EFBFBD><E996AC><EFBFBD>漤<EFBFBD><E6BCA4><EFBFBD><EFBFBD>蝏?**蝘穃恕 (Department)** <20>?**銝芯犖**<2A>?
|
||||
* 靽格迤撱箄悅嚗?
|
||||
<20><>閬<EFBFBD><E996AC><EFBFBD>?PRD v2.1 銝剖<E98A9D>銋厩<E98A8B> TenantQuotaAllocation 銵函<E98AB5><E587BD><EFBFBD><EFBFBD><EFBFBD>舀<EFBFBD> targetType ('DEPARTMENT' | 'USER')<29>?
|
||||
### **1.1 缺失“精细化配额分配”模型 (Critical)**
|
||||
|
||||
* **现状**:报告中设计了 tenant\_quotas 表,看似是针对租户的总配额。
|
||||
* **PRD 要求**:医院端需要将配额分配给 **科室 (Department)** 或 **个人**。
|
||||
* 修正建议:
|
||||
需要引入 PRD v2.1 中定义的 TenantQuotaAllocation 表结构,支持 targetType ('DEPARTMENT' | 'USER')。
|
||||
model TenantQuotaAllocation {
|
||||
id Int @id @default(autoincrement())
|
||||
tenantId String @map("tenant\_id") @db.Uuid
|
||||
targetType String // 'DEPARTMENT' | 'USER'
|
||||
targetKey String // DepartmentID <EFBFBD>?UserID
|
||||
targetKey String // DepartmentID 或 UserID
|
||||
limitAmount BigInt // 分配额度
|
||||
usedAmount BigInt @default(0)
|
||||
|
||||
@@ -26,64 +27,76 @@
|
||||
@@schema("platform\_schema")
|
||||
}
|
||||
|
||||
### **1.2 蝻箏仃<EFBFBD>憕rompt 撌亦<EFBFBD><EFBFBD>砽<EFBFBD>萘㮾<EFBFBD>單<EFBFBD><EFBFBD>?*
|
||||
### **1.2 缺失“Prompt 工程化”相关权限**
|
||||
|
||||
* **<EFBFBD>啁𠶖**嚗𡁏𥁒<F0A1818F>𠰴<EFBFBD>瘜其<E7989C><E585B6>𡁶鍂<F0A181B6><E98D82><EFBFBD><EFBFBD>瑞恣<E7919E><E681A3><EFBFBD><EFBFBD>僐<EFBFBD>?
|
||||
* **PRD 閬<EFBFBD><EFBFBD>**嚗朞<E59A97><E69C9E>亦垢<E4BAA6><E59EA2>閬?**Prompt <20>啣漲憸<E6BCB2><E686B8>** <20>蠘<EFBFBD><E8A098><EFBFBD><EFBFBD><EFBFBD>誩㭠<E8AAA9><E3ADA0><EFBFBD><EFBFBD>閬<EFBFBD><E996AC>銝芰鸌畾羓<E795BE><E7BE93><EFBFBD><EFBFBD><EFBFBD>?prompt:debug嚗<67><E59A97>霈貊鍂<E8B28A>瑕銁<E79195>煺漣<E785BA>臬<EFBFBD>霂餃<E99C82> Draft <EFBFBD>唳旿<EFBFBD>?
|
||||
* **靽格迤撱箄悅**嚗𡁜銁霈曇恣 permissions嚗<73><E59A97><EFBFBD>𨀣<EFBFBD>蝞堒<E89D9E>蝏<EFBFBD><E89D8F>摨行綉<E8A18C>塚<EFBFBD><E5A19A>碶誨<E7A2B6><E8AAA8>虜<EFBFBD>譍葉嚗峕<E59A97>蝖桅<E89D96><E6A185>?PROMPT\_ADMIN <EFBFBD>?DEBUGGER 閫坿𠧧<EFBFBD>賢<EFBFBD><EFBFBD>?
|
||||
### **1.3 摰∟恣<E2889F>亙<EFBFBD><E4BA99><EFBFBD><EFBFBD>閫<EFBFBD><E996AB>扯<EFBFBD>瘙?*
|
||||
* **现状**:报告关注了通用的租户管理权限。
|
||||
* **PRD 要求**:运营端需要 **Prompt 灰度预览** 功能。这意味着需要一个特殊的权限点 prompt:debug,允许用户在生产环境读取 Draft 数据。
|
||||
* **修正建议**:在设计 permissions(如果打算做细粒度控制)或代码常量中,明确预留 PROMPT\_ADMIN 或 DEBUGGER 角色能力。
|
||||
|
||||
* **<2A>啁𠶖**嚗𡁏𥁒<F0A1818F>𦠜<EFBFBD><F0A6A09C>唬<EFBFBD> admin\_operation\_logs<67>?
|
||||
* **PRD 閬<><E996AC>**嚗朞晓隡<E69993>垢 (Pharma) 撖孵恣霈⊥𠯫敹埈<E695B9> FDA 21 CFR Part 11 <20><><EFBFBD>閫<EFBFBD><E996AB>瘙<EFBFBD><E79899><EFBFBD>唳旿靽格㺿<E6A0BC>閗蕨嚗剹<E59A97>?
|
||||
* **靽格迤撱箄悅**嚗𡁶&靽?Log 銵典<E98AB5><E585B8>?beforeData <20>?afterData (撌脣<E6928C><E884A3>恬<EFBFBD>敺<EFBFBD>末)嚗䔶<E59A97>撱箄悅憓𧼮<E68693> module 摮埈挾嚗<E68CBE>躹<EFBFBD><E8BAB9>糓 IIT 璅∪<E79285><E288AA><EFBFBD>𠯫敹𡑒<E695B9><F0A19192>舐頂蝏罸<E89D8F>蝵格𠯫敹梹<E695B9>嚗䔶誑靘輯晓隡<E69993>垢<EFBFBD>芣䰻霂Z䌊撌梁㮾<E6A281>喟<EFBFBD><E5969F>亙<EFBFBD><E4BA99>?
|
||||
## **2\. <20>唳旿摨栞挽霈∪恣<E288AA>?(Schema Review)**
|
||||
### **1.3 审计日志的合规性要求**
|
||||
|
||||
* **现状**:报告提到了 admin\_operation\_logs。
|
||||
* **PRD 要求**:药企端 (Pharma) 对审计日志有 FDA 21 CFR Part 11 的合规要求(数据修改痕迹)。
|
||||
* **修正建议**:确保 Log 表包含 beforeData 和 afterData (已包含,很好),但建议增加 module 字段(区分是 IIT 模块的日志还是系统配置日志),以便药企端只查询自己相关的日志。
|
||||
|
||||
## **2\. 数据库设计审查 (Schema Review)**
|
||||
|
||||
### **2.1 用户表统一策略 (User Table)**
|
||||
|
||||
雿删<EFBFBD><EFBFBD>喟<EFBFBD>嚗帋<EFBFBD><EFBFBD>?platform\_schema.users嚗<EFBFBD><EFBFBD><EFBFBD>?public.users<EFBFBD>?
|
||||
霂<EFBFBD>遠嚗尠<EFBFBD> 摰<><E691B0>甇<EFBFBD>&<EFBFBD>?
|
||||
<EFBFBD>鞾<EFBFBD>嚗朞<EFBFBD>蝘餅㺭<EFBFBD>格𧒄嚗<EFBFBD>𦛚敹<EFBFBD>釣<EFBFBD>?public.users 銝剔<EFBFBD> id 憒<EFBFBD><EFBFBD>銝齿糓 UUID <20>澆<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>𨀣糓<F0A880A3>抒頂蝏毺<E89D8F><E6AFBA>鞟<EFBFBD>嚗㚁<E59A97><E39A81><EFBFBD>閬<EFBFBD><E996AC><EFBFBD>惩<EFBFBD>憭<EFBFBD><E686AD>嚗<EFBFBD>炏<EFBFBD>坔<EFBFBD><E59D94>𥪜<EFBFBD><F0A5AA9C>桐<EFBFBD><E6A190>仿<EFBFBD><E4BBBF>?
|
||||
### **2.2 蝘<><E89D98><EFBFBD>𣂼<EFBFBD>銵典𦶢<E585B8>?(Naming Convention)**
|
||||
你的决策:保留 platform\_schema.users,删除 public.users。
|
||||
评价:✅ 完全正确。
|
||||
提醒:迁移数据时,务必注意 public.users 中的 id 如果不是 UUID 格式(如果是旧系统生成的),需要做映射处理,否则关联外键会报错。
|
||||
|
||||
### **2.2 租户成员表命名 (Naming Convention)**
|
||||
|
||||
你的设计:TenantUser / tenant\_users
|
||||
PRD 设计:TenantMember / tenant\_members
|
||||
撱箄悅嚗𡁜遣霈桃<EFBFBD>銝<EFBFBD>雿輻鍂 TenantMember<EFBFBD><EFBFBD><EFBFBD>銝?"User" <EFBFBD>𡁜虜<EFBFBD><EFBFBD>蒈敶閗揭<EFBFBD>瑕<EFBFBD>雿橒<EFBFBD><EFBFBD>?"Member" <20><><EFBFBD>蝘滨<E89D98>蝏<EFBFBD><E89D8F>蝟颱葉<E9A2B1><E89189>澈隞賬<E99A9E><E8B3AC><EFBFBD>蝘滩祗銋匧躹<E58CA7><E8BAB9>銁隞<E98A81><E99A9E>銝哨<E98A9D>憒?member.role vs user.role嚗劐<EFBFBD><EFBFBD>湔<EFBFBD><EFBFBD>啜<EFBFBD>?
|
||||
### **2.3 <20>券秄銵函<E98AB5><E587BD>?(Department)**
|
||||
建议:建议统一使用 TenantMember。因为 "User" 通常指登录账号实体,而 "Member" 指某种组织关系中的身份。这种语义区分在代码中(如 member.role vs user.role)会更清晰。
|
||||
|
||||
雿删<EFBFBD>霈曇恣嚗𡁏𣈲<EFBFBD><EFBFBD><EFBFBD>敶Y<EFBFBD><EFBFBD>?(parentId)<29>?
|
||||
霂<EFBFBD>遠嚗尠<EFBFBD> 隡条<E99AA1><E69DA1><EFBFBD><EFBFBD>銝箸𧊋<E7AEB8>交𣈲<E4BAA4><F0A388B2>之<EFBFBD>衤<EFBFBD><E8A1A4>脣龫<E884A3>Y<EFBFBD>憭齿<E686AD>蝘穃恕蝏𤘪<E89D8F>嚗<EFBFBD><E59A97>蝘?\-\> 敹<><E695B9>蝘?\-\> 銝<><E98A9D><EFBFBD>躹嚗㗇<E59A97>銝衤<E98A9D><E8A1A4>箇<EFBFBD><E7AE87>?
|
||||
## **3\. <20><><EFBFBD>航楝蝥踹虾銵峕<E98AB5>扯<EFBFBD>隡?*
|
||||
### **2.3 部门表结构 (Department)**
|
||||
|
||||
你的设计:支持树形结构 (parentId)。
|
||||
评价:✅ 优秀。这为未来支持大型三甲医院的复杂科室结构(内科 \-\> 心内科 \-\> 一病区)打下了基础。
|
||||
|
||||
## **3\. 技术路线可行性评估**
|
||||
|
||||
### **3.1 JWT 方案**
|
||||
|
||||
* **霂<EFBFBD>遠**嚗帋蝙<E5B88B>?jsonwebtoken \+ localStorage <EFBFBD>舀<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鞟<EFBFBD><EFBFBD>?SPA <20>寞<EFBFBD><E5AF9E>?
|
||||
* **憌𡡞埯<EFBFBD>鞟內**嚗饝ocalStorage 摰寞<EFBFBD><EFBFBD>堒<EFBFBD> XSS <20>餃稬<E9A483><E7A8AC>蒾<EFBFBD>?MVP <20>嗆挾<E59786>舀𦻖<E88880>梹<EFBFBD>雿<EFBFBD>遣霈桀<E99C88>蝏哨<E89D8F><E593A8>孵<EFBFBD><E5ADB5>航晓隡<E69993>垢銝羓瑪<E7BE93>㵪<EFBFBD><E3B5AA><EFBFBD><EFBFBD> **HttpOnly Cookie** <20>寞<EFBFBD>嚗峕<E59A97><E5B395><EFBFBD>銁<EFBFBD>滨垢<E6BBA8>惩撩 XSS <20>脫擪<E884AB>?
|
||||
### **3.2 <20><><EFBFBD>銝剝𡢿隞?(requireTenantAccess)**
|
||||
* **评价**:使用 jsonwebtoken \+ localStorage 是标准且成熟的 SPA 方案。
|
||||
* **风险提示**:localStorage 容易受到 XSS 攻击。虽然 MVP 阶段可接受,但建议后续(特别是药企端上线前)考虑 **HttpOnly Cookie** 方案,或者在前端加强 XSS 防护。
|
||||
|
||||
### **3.2 权限中间件 (requireTenantAccess)**
|
||||
|
||||
* **评价**:这是多租户隔离的核心。
|
||||
* **补充建议**:除了 API 层的中间件,强烈建议按照我之前提供的 **Prisma Extension** 方案,在数据库访问层(ORM)再加一道锁。
|
||||
* *原因*:开发人员可能会忘记在 Controller 里加中间件,但很难绕过全局的 Prisma Client 扩展。
|
||||
|
||||
* **霂<>遠**嚗朞<E59A97><E69C9E>臬<EFBFBD>蝘<EFBFBD><E89D98><EFBFBD>𠉛氖<F0A0899B><E6B096>瓲敹<E793B2><E695B9>?
|
||||
* **銵亙<E98AB5>撱箄悅**嚗𡁻膄鈭?API 撅<><E69285>銝剝𡢿隞塚<E99A9E>撘箇<E69298>撱箄悅<E7AE84>厩<EFBFBD><E58EA9>睲<EFBFBD><E79DB2>齿<EFBFBD>靘𤤿<E99D98> **Prisma Extension** <20>寞<EFBFBD>嚗<EFBFBD>銁<EFBFBD>唳旿摨栞挪<E6A09E>桀<EFBFBD>嚗㇉RM嚗匧<E59A97><E58CA7>牐<EFBFBD><E78990>㯄<EFBFBD><E3AF84>?
|
||||
* *<2A>笔<EFBFBD>*嚗𡁜<E59A97><F0A1819C>睲犖<E79DB2>睃虾<E79D83>賭<EFBFBD>敹䁅扇<E48185>?Controller <20><><EFBFBD>銝剝𡢿隞塚<E99A9E>雿<EFBFBD><E99BBF><EFBFBD>曄<EFBFBD>餈<EFBFBD><E9A488>撅<EFBFBD><E69285>?Prisma Client <20>拙<EFBFBD><E68B99>?
|
||||
### **3.3 品牌定制 (Branding)**
|
||||
|
||||
* **霂<EFBFBD>遠**嚗𡁏𥁒<F0A1818F>𠹺葉撌脣<E6928C><E884A3>?api/public/tenant-config <EFBFBD>亙藁<EFBFBD>?
|
||||
* **<EFBFBD>鞾<EFBFBD>**嚗朞砲<E69C9E>亙藁<E4BA99>∪<EFBFBD><E288AA>牐<EFBFBD> **蝻枏<EFBFBD> (Cache)** <EFBFBD>批<EFBFBD>嚗<EFBFBD><EFBFBD> Cache-Control: public, max-age=3600嚗㚁<EFBFBD><EFBFBD>牐蛹瘥譍葵<EFBFBD>冽<EFBFBD><EFBFBD>枏<EFBFBD><EFBFBD>餃<EFBFBD>憿菟<EFBFBD>隡朞<EFBFBD><EFBFBD>剁<EFBFBD>擃睃僎<EFBFBD>睲<EFBFBD>銝滩<EFBFBD><EFBFBD>湔𦻖<EFBFBD>𤘪㺭<EFBFBD>桀<EFBFBD><EFBFBD>?
|
||||
## **4\. 撘<><E69298>𤏸恣<F0A48FB8>雴<EFBFBD><E99BB4>硋遣霈?*
|
||||
* **评价**:报告中已包含 api/public/tenant-config 接口。
|
||||
* **提醒**:该接口务必加上 **缓存 (Cache)** 控制(如 Cache-Control: public, max-age=3600),因为每个用户打开登录页都会调用,高并发下不要直接打数据库。
|
||||
|
||||
## **4\. 开发计划优化建议**
|
||||
|
||||
报告中的 **8.5 Phase 4 (运营端 MVP)** 和 **8.6 Phase 5 (专属登录)** 排期合理。
|
||||
|
||||
<EFBFBD>亙<EFBFBD>銝剔<EFBFBD> **8.5 Phase 4 (餈鞱𨯫蝡?MVP)** <20>?**8.6 Phase 5 (銝枏<E98A9D><E69E8F>餃<EFBFBD>)** <20>埝<EFBFBD><E59F9D><EFBFBD><EFBFBD><EFBFBD>?
|
||||
**建议调整点:**
|
||||
|
||||
1. **Phase 0 (<EFBFBD>唳旿餈<EFBFBD>宏) 敹<>◆<EFBFBD>匧<EFBFBD>皛𡁏䲮獢?*嚗?
|
||||
* <EFBFBD>典<EFBFBD><EFBFBD>?public.users 銋见<EFBFBD>嚗<EFBFBD><EFBFBD>撠<EFBFBD><EFBFBD><EFBFBD>滚𦶢<EFBFBD>滢蛹 public.users\_backup嚗䔶<EFBFBD><EFBFBD>?1 <20>剁<EFBFBD><E58981>脫迫餈<E8BFAB>宏<EFBFBD>𡁏𧋦<F0A1818F>?Bug 撖潸稲<E6BDB8>唳旿銝W仃<EFBCB7>?
|
||||
2. **<EFBFBD>𣂼<EFBFBD>摰帋<EFBFBD><EFBFBD>𡏭<EFBFBD>蝥抒恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>萘<EFBFBD>摮鞉㺭<EFBFBD>?*嚗?
|
||||
* <EFBFBD>?Prisma Seed <EFBFBD>𡁏𧋦銝哨<EFBFBD>蝖祉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝芾<EFBFBD>蝥抒恣<EFBFBD><EFBFBD><EFBFBD>韐血噡嚗<EFBFBD><EFBFBD> admin@yizhengxun.com嚗㚁<E59A97><E39A81>血<EFBFBD>蝟餌<E89D9F>銝羓瑪<E7BE93>𦒘<EFBFBD>餈𥕢<E9A488><F0A595A2>餃<EFBFBD><E9A483>啜<EFBFBD>?
|
||||
3. **<EFBFBD>滨垢<EFBFBD><EFBFBD><EFBFBD> Mock <20><>像皛𤏸<E79A9B>皜?*嚗?
|
||||
* <EFBFBD>?Phase 3 撖寞𦻖<EFBFBD>塚<EFBFBD>銝滩<EFBFBD><EFBFBD>湔𦻖<EFBFBD>𣳇膄 PermissionContext嚗諹<EFBFBD>峕糓靽格㺿<EFBFBD>嗅<EFBFBD><EFBFBD>典<EFBFBD><EFBFBD>堆<EFBFBD>隞?API <20>瑕<EFBFBD><E79195>唳旿<E594B3>蹂誨 Mock <20>唳旿嚗諹<E59A97><E8ABB9>瑕虾隞交<E99A9E>撠誩<E692A0><E8AAA9>孵𢆡<E5ADB5>滨垢銝𡁜𦛚隞<F0A69B9A><E99A9E><EFBFBD>?
|
||||
1. **Phase 0 (数据迁移) 必须有回滚方案**:
|
||||
* 在删除 public.users 之前,先将其重命名为 public.users\_backup,保留 1 周,防止迁移脚本有 Bug 导致数据丢失。
|
||||
2. **提前定义“超级管理员”种子数据**:
|
||||
* 在 Prisma Seed 脚本中,硬编码一个超级管理员账号(如 admin@yizhengxun.com),否则系统上线后你进不去后台。
|
||||
3. **前端权限 Mock 的平滑过渡**:
|
||||
* 在 Phase 3 对接时,不要直接删除 PermissionContext,而是修改其内部实现,从 API 获取数据替代 Mock 数据,这样可以最小化改动前端业务代码。
|
||||
|
||||
## **5\. 总结**
|
||||
|
||||
餈嗘遢<EFBFBD>𦠜<EFBFBD><EFBFBD>𣂷<EFBFBD>閫坿𠧧雿梶頂璇喟<EFBFBD><EFBFBD>亙<EFBFBD><EFBFBD>𧢲糓銝<EFBFBD>銝芷<EFBFBD>撣豢<EFBFBD><EFBFBD><EFBFBD>極蝔贝絲<EFBFBD>嫘<EFBFBD><EFBFBD><EFBFBD>瘝⊥<EFBFBD>餈<EFBFBD>漲霈曇恣嚗<EFBFBD><EFBFBD>蝖格<EFBFBD>雿譍<EFBFBD> MVP <20><>瓲敹<E793B2><E695B9>?
|
||||
这份《权限与角色体系梳理报告》是一个非常棒的工程起点。它没有过度设计,准确抓住了 MVP 的核心。
|
||||
|
||||
**下一步行动指令:**
|
||||
|
||||
1. **<EFBFBD><EFBFBD>熙**嚗𡁜<E59A97>銵典<E98AB5> TenantUser 靽格㺿銝?TenantMember<EFBFBD>?
|
||||
2. **憓𧼮<EFBFBD>**嚗𡁜銁 Schema 銝剖<EFBFBD><EFBFBD>?TenantQuotaAllocation 銵剁<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?1.1嚗剹<EFBFBD>?
|
||||
3. **<EFBFBD>扯<EFBFBD>**嚗𡁏<E59A97><F0A1818F>扳𥁒<E689B3>𠹺葉<F0A0B9BA>?Phase 0 \- Phase 6 撘<EFBFBD>憪𧢲<EFBFBD>銵䎚<EFBFBD>?
|
||||
**蝏栞捏嚗?* <20><>﹝韐券<E99F90>擃矋<E69383>憌𡡞埯<F0A1A19E>舀綉嚗?*<2A>臭誑撘<E8AA91>憪见<E686AA><E8A781>?*<2A>
|
||||
1. **采纳**:将表名 TenantUser 修改为 TenantMember。
|
||||
2. **增加**:在 Schema 中增加 TenantQuotaAllocation 表(参考 1.1)。
|
||||
3. **执行**:按照报告中的 Phase 0 \- Phase 6 开始执行。
|
||||
|
||||
**结论:** 文档质量高,风险可控,**可以开始开发**。
|
||||
Reference in New Issue
Block a user