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,76 +1,85 @@
|
||||
# **IIT Manager Agent 螟夂ォッ莠、莠呈オ∫ィ倶ク取揀髯占ョセ隶?(V1.0)**
|
||||
# **IIT Manager Agent 多端交互流程与权限设计 (V1.0)**
|
||||
|
||||
## **1\. 譬ク蠢<EFBFBD>ァ定牡螳壻ケ我ク守サ育ォッ遏ゥ髦?*
|
||||
## **1\. 核心角色定义与终端矩阵**
|
||||
|
||||
系统通过“基础角色 \+ 扩展权限”模式,支持单中心与多中心项目的灵活配置。
|
||||
|
||||
邉サ扈滄夊ソ<EFBFBD>懷渕遑隗定牡 \+ 謇ゥ螻墓揀髯絶晄ィ。蠑擾シ梧髪謖∝黒荳ュ蠢<EFBDAD>ク主、壻クュ蠢<EFBDAD>。ケ逶ョ逧<EFBDAE><E980A7>豢サ驟咲スョ縲?
|
||||
| 角色代码 | 角色名称 | 核心职责 | 主要终端 | 核心权限 |
|
||||
| :---- | :---- | :---- | :---- | :---- |
|
||||
| **SYS\_ADMIN** | 邉サ扈溽ョ。逅<EFBFBD><EFBFBD>?| 蟷ウ蜿ー蛻晏ァ句喧縲∝、夂ァ滓姐邂。逅<EFBDA1>.ify 遏・隸<EFBDA5>コ鍋サエ謚?| PC 遶?(Admin Portal) | 蜈ィ螻驟咲スョ縲∬オ<EFBFBD>コ仙<EFBFBD>驟?|
|
||||
| **PROJECT\_PI** | 鬘ケ逶ョ雍溯エ」莠?(PI) | 鬘ケ逶ョ霑帛コヲ逶第而縲<E8808C>㍾螟ァ蛛冗ヲサ蜀ウ遲悶∵匱閭ス謚・陦ィ譟・逵?| 蠕ョ菫。遶?(莨∝セョ騾夂衍+蟆冗ィ句コ? | 蠖ア蟄千憾諤∵怙扈亥ョ。謇ケ縲∝ッシ蜃コ謚・陦?|
|
||||
| **CRC\_OPERATOR** | 蜊剰ー<EFBFBD><EFBFBD>?(CRC) | 謨ー謐ョ蠖募<EFBFBD>縲、I 蟒コ隶ョ螟肴<E89E9F>ク縲∵ぅ閠<E38185>囂隶ソ謇ァ陦?| REDCap (蠖募<EFBFBD>) \+ PC Workbench | 雍ィ逍大、<EFBFBD>炊縲∵焚謐ョ驥<EFBFBD>寔縲∵ぅ閠<EFBFBD>コ貞<EFBFBD>?|
|
||||
| **SUBJECT\_PATIENT** | 謔」閠?(蜿苓ッ戊? | 謗・謾カ謠宣<E8ACA0>縲∝暢隸「遲皮桝縲、E/髫剰ョソ荳頑冠 | 荳ェ莠コ蠕ョ菫。 (H5/蟆冗ィ句コ? | 莉サ蜉。蜿埼ヲ医<E58CBB>琉遲泌暢隸?|
|
||||
| **SUB\_I / CO\_PI** | 蟄蝉クュ蠢<EFBFBD>エ溯エ」莠コ | 蛻<>クュ蠢<EFBDAD>焚謐ョ譟・逵九∵悽荳ュ蠢<EFBDAD>オ∫ィ句ョ。謇ケ | 蠕ョ菫。遶?| 莉<>剞譛ャ荳ュ蠢<EFBDAD>噪謨ー謐ョ譚<EFBDAE>剞 |
|
||||
| **SYS\_ADMIN** | 系统管理员 | 平台初始化、多租户管理、Dify 知识库维护 | PC 端 (Admin Portal) | 全局配置、资源分配 |
|
||||
| **PROJECT\_PI** | 项目负责人 (PI) | 项目进度监控、重大偏离决策、智能报表查看 | 微信端 (企微通知+小程序) | 影子状态最终审批、导出报表 |
|
||||
| **CRC\_OPERATOR** | 协调员 (CRC) | 数据录入、AI 建议复核、患者随访执行 | REDCap (录入) \+ PC Workbench | 质疑处理、数据采集、患者互动 |
|
||||
| **SUBJECT\_PATIENT** | 患者 (受试者) | 接收提醒、咨询答疑、AE/随访上报 | 个人微信 (H5/小程序) | 任务反馈、问答咨询 |
|
||||
| **SUB\_I / CO\_PI** | 子中心负责人 | 分中心数据查看、本中心流程审批 | 微信端 | 仅限本中心的数据权限 |
|
||||
|
||||
## **2\. 霍ィ扈育ォッ譬ク蠢<EFBFBD>コ、莠呈オ∫ィ?(User Journeys)**
|
||||
## **2\. 跨终端核心交互流程 (User Journeys)**
|
||||
|
||||
### **2.1 智能质控与影子决策流 (核心闭环)**
|
||||
|
||||
隸・豬∫ィ倶ス鍋鴫莠<EFBFBD>彝EDCap 蠖募<EFBFBD> \-\> AI 蜿醍鴫 \-\> Workbench 螟肴<EFBFBD>ク \-\> 蝗槫<EFBFBD> REDCap窶晉噪騾サ霎代?
|
||||
1. **謨ー謐ョ莠ァ逕<EFBDA7>**<EFBFBD>咾RC 蝨?**REDCap 蜴溽函逡碁擇**謠蝉コ、蜿苓ッ戊?V1 隶ソ隗<EFBDBF>焚謐ョ縲?
|
||||
2. **逶大成荳取耳逅?*<2A>哢ode.js 謗・謾カ Webhook<6F>碁ゥア蜉?**QC Agent** 隹<>畑 Dify RAG 譽邏?Protocol<6F>悟書邇ー騾サ霎醍泝逶セ縲?
|
||||
3. **蠖ア蟄千函謌<EFBFBD>**<EFBFBD>夂ウサ扈溷惠 **Postgres (iit\_schema)** 荳ュ逕滓<E98095>荳譚。迥カ諤∽クコ PROPOSED 逧<>スア蟄占ョー蠖輔?
|
||||
4. **蜊ウ譌カ謠宣<EFBFBD>**<EFBFBD>?
|
||||
* **PC 遶?*<2A>咾RC 逧?Workbench 莉サ蜉。蜊。迚<EFBDA1>ョ樊慮譖エ譁ー縲?
|
||||
* **蠕ョ菫。遶?*<2A>夊凶荳コ荳・驥崎ソ晁レ<E69981>瑚<EFBFBD>蜉ィ扈?PI/CRC 謗ィ騾∽シ∝セョ騾夂衍縲?
|
||||
5. **螟肴<EFBFBD>ク蜀ウ遲<EFBFBD>**<EFBFBD>咾RC 逋サ蠖<EFBDBB> **PC Workbench**<EFBFBD>梧衍逵玖ッ∵紺體セ蟇ケ豈斐?
|
||||
6. **豁」蠑乗鴬陦<EFBFBD>**<EFBFBD>咾RC 轤ケ蜃サ窶懃。ョ隶、蟷カ譖エ譁ー窶晢シ檎ウサ扈溯ー<E6BAAF>畑 REDCap API 蟆<>ソョ豁」蛟シ謌冶エィ逍醍憾諤∝<E8ABA4>蝗?**REDCap**<2A>悟スア蟄占ョー蠖慕憾諤∬スャ荳?EXECUTED縲?
|
||||
该流程体现了“REDCap 录入 \-\> AI 发现 \-\> Workbench 复核 \-\> 回写 REDCap”的逻辑。
|
||||
|
||||
1. **数据产生**:CRC 在 **REDCap 原生界面**提交受试者 V1 访视数据。
|
||||
2. **监听与推理**:Node.js 接收 Webhook,驱动 **QC Agent** 调用 Dify RAG 检索 Protocol,发现逻辑矛盾。
|
||||
3. **影子生成**:系统在 **Postgres (iit\_schema)** 中生成一条状态为 PROPOSED 的影子记录。
|
||||
4. **即时提醒**:
|
||||
* **PC 端**:CRC 的 Workbench 任务卡片实时更新。
|
||||
* **微信端**:若为严重违背,自动给 PI/CRC 推送企微通知。
|
||||
5. **复核决策**:CRC 登录 **PC Workbench**,查看证据链对比。
|
||||
6. **正式执行**:CRC 点击“确认并更新”,系统调用 REDCap API 将修正值或质疑状态写回 **REDCap**,影子记录状态转为 EXECUTED。
|
||||
|
||||
### **2.2 任务驱动与患者互动流**
|
||||
|
||||
隸・豬∫ィ倶ス鍋鴫莠<EFBFBD>應ササ蜉。蠑墓<EFBFBD>?\-\> 莨∝セョ隗ヲ霎セ \-\> AI 遏・隸<EFBDA5>コ灘屓螟坂晉噪騾サ霎代?
|
||||
1. **莉サ蜉。隗ヲ蜿<EFBDA6>**<EFBFBD>壻ササ蜉。蠑墓梼譽豬句芦謔」閠?P001 譏取律髴蝗櫁ョソ<EFBDAE>檎憾諤∝序荳?DUE\_SOON縲?
|
||||
2. **豸域<EFBFBD>謗ィ騾?*<2A>夂ウサ扈滄夊ソ<E5A48A>**莨∽ク壼セョ菫。 API**<EFBFBD>御サ・ CRC 霄ォ莉ス蜷第ぅ閠<E38185>セョ菫。蜿鷹∵署驢偵?
|
||||
3. **謔」閠<EFBFBD>ソス髣?*<2A>壽ぅ閠<E38185>惠蠕ョ菫。蝗槫、搾シ壺懈<C280>莉雁、ゥ髴隕∝●闕ッ蜷暦シ溪昴?
|
||||
4. **AI 螟<>炊**<EFBFBD>?*Counseling Agent** 蝓コ莠<EFBDBA> Dify 遏・隸<EFBDA5>コ鍋函謌仙屓遲碑拷遞ソ縲?
|
||||
5. **莠コ蟾・莉句<EFBFBD>**<EFBFBD>?
|
||||
* 闍・荳コ邂蜊慕ァ第勸<E7ACAC>窟gent 逶エ謗・蝗槫、阪?
|
||||
* 闍・豸牙所逕ィ闕ッ謖<EFBFBD>ッシ<EFBFBD>梧署驢<EFBFBD> CRC 蝨ィ莨∝セョ萓ァ霎ケ譬冗。ョ隶、隸・闕臥ィソ蜷主<E89CB7>蜿鷹√?
|
||||
### **2.3 PI 螳剰ァらョ。逅<EFBDA1>オ?*
|
||||
该流程体现了“任务引擎 \-\> 企微触达 \-\> AI 知识库回复”的逻辑。
|
||||
|
||||
1. **任务触发**:任务引擎检测到患者 P001 明日需回访,状态变为 DUE\_SOON。
|
||||
2. **消息推送**:系统通过**企业微信 API**,以 CRC 身份向患者微信发送提醒。
|
||||
3. **患者追问**:患者在微信回复:“我今天需要停药吗?”。
|
||||
4. **AI 处理**:**Counseling Agent** 基于 Dify 知识库生成回答草稿。
|
||||
5. **人工介入**:
|
||||
* 若为简单科普,Agent 直接回复。
|
||||
* 若涉及用药指导,提醒 CRC 在企微侧边栏确认该草稿后再发送。
|
||||
|
||||
### **2.3 PI 宏观管理流**
|
||||
|
||||
1. **周期汇报**:**Reporting Agent** 每周生成统计报表。
|
||||
2. **品牌化展示**:PI 收到企微通知,点击跳转至**小程序**。
|
||||
3. **多租户适配**:小程序根据项目 ID 自动加载 \[北医三院\] 等品牌元素和 Logo。
|
||||
4. **移动决策**:PI 在小程序内对 CRC 提交的疑难问题进行远程批示。
|
||||
|
||||
1. **蜻ィ譛滓ア<E6BB93>冠**<EFBFBD>?*Reporting Agent** 豈丞捉逕滓<E98095>扈溯ョ。謚・陦ィ縲?
|
||||
2. **蜩∫煙蛹門ア慕、?*<2A>啀I 謾カ蛻ー莨∝セョ騾夂衍<E5A482>檎せ蜃サ霍ウ霓ャ閾ウ**蟆冗ィ句コ?*縲?
|
||||
3. **螟夂ァ滓姐騾る<E9A8BE>**<EFBFBD>壼ー冗ィ句コ乗<EFBFBD>ケ謐ョ鬘ケ逶ョ ID 閾ェ蜉ィ蜉<EFBDA8>霓ス \[蛹怜現荳蛾劼\] 遲牙刀迚悟<E8BF9A>邏<EFBFBD>蜥<EFBFBD> Logo縲?
|
||||
4. **遘サ蜉ィ蜀ウ遲<EFBDB3>**<EFBFBD>啀I 蝨ィ蟆冗ィ句コ丞<EFBDBA>蟇ケ CRC 謠蝉コ、逧<EFBDA4>桝髫セ髣ョ鬚倩ソ幄。瑚ソ懃ィ区音遉コ縲?
|
||||
## **3\. 终端功能边界划分 (Function Boundary)**
|
||||
|
||||
| 蜉溯<EFBFBD>讓。蝮<EFBFBD> | PC 邂。逅<EFBDA1>遭髣ィ謌?| PC Agent Workbench | 蠕ョ菫。蟆冗ィ句コ?H5 | 莨∽ク壼セョ菫。騾夂衍 |
|
||||
| 功能模块 | PC 管理员门户 | PC Agent Workbench | 微信小程序/H5 | 企业微信通知 |
|
||||
| :---- | :---- | :---- | :---- | :---- |
|
||||
| **鬘ケ逶ョ蛻晏ァ句<EFBFBD>?* | 100% (荳贋シ<EFBFBD>譁ケ譯<EFBFBD>) | 0% | 0% | 0% |
|
||||
| **项目初始化** | 100% (上传方案) | 0% | 0% | 0% |
|
||||
| **字段映射配置** | 100% | 0% | 0% | 0% |
|
||||
| **謨ー謐ョ雍ィ謗ァ螳。譬ク** | 0% | 100% (豺ア蠎ヲ豈泌ッケ) | 20% (邏ァ諤・遑ョ隶? | 0% (莉<EFBFBD><EFBFBD>蜿? |
|
||||
| **数据质控审核** | 0% | 100% (深度比对) | 20% (紧急确认) | 0% (仅入口) |
|
||||
| **智能采集(OCR)** | 0% | 100% | 0% | 0% |
|
||||
| **霑帛コヲ/鬟朱勦謚・陦ィ** | 20% | 50% | 100% (邊セ鄒主庄隗<EFBFBD><EFBFBD>? | 10% (蜊。迚<EFBFBD>遭隕<EFBFBD>) |
|
||||
| **謔」閠<EFBFBD>イ滄夊ョー蠖?* | 0% | 100% (蠖呈。」) | 0% | 100% (螳樊慮莠、莠<EFBFBD>) |
|
||||
| **进度/风险报表** | 20% | 50% | 100% (精美可视化) | 10% (卡片摘要) |
|
||||
| **患者沟通记录** | 0% | 100% (归档) | 0% | 100% (实时交互) |
|
||||
|
||||
## **4\. 譚<EFBFBD>剞荳主ョ牙<EFBFBD>讓。蝙?(Access Control)**
|
||||
## **4\. 权限与安全模型 (Access Control)**
|
||||
|
||||
### **4.1 RBAC 权限设计**
|
||||
|
||||
邉サ扈滄㊦逕ィ窶懷粥閭ス譚<EFBFBD><EFBFBD>?\+ 謨ー謐ョ闌<EFBDAE>峩窶晏曙驥肴<E9A9A5>。鬪鯉シ<E9AF89>
|
||||
系统采用“功能权限 \+ 数据范围”双重校验:
|
||||
|
||||
* **功能权限 (Permission)**:决定能否点击“确认回写”、“导出报表”。
|
||||
* **数据范围 (Scope)**:
|
||||
* GLOBAL:可看所有中心数据(项目 PI)。
|
||||
* SITE\_ONLY:仅限本中心(子中心 PI/CRC)。
|
||||
* PATIENT\_ONLY:仅限本人(受试者)。
|
||||
|
||||
* **蜉溯<E89C89>譚<EFBFBD>剞 (Permission)**<2A>壼<EFBFBD>螳夊<E89EB3>蜷ヲ轤ケ蜃サ窶懃。ョ隶、蝗槫<E89D97>窶昴≫懷ッシ蜃コ謚・陦ィ窶昴?
|
||||
* **謨ー謐ョ闌<EFBDAE>峩 (Scope)**<2A>?
|
||||
* GLOBAL<41>壼庄逵区園譛我クュ蠢<EFBDAD>焚謐ョ<E8AC90>磯。ケ逶ョ PI<50>峨?
|
||||
* SITE\_ONLY<4C>壻サ<E5A3BB>剞譛ャ荳ュ蠢<EFBDAD>シ亥ュ蝉クュ蠢<EFBDAD> PI/CRC<52>峨?
|
||||
* PATIENT\_ONLY<4C>壻サ<E5A3BB>剞譛ャ莠コ<E88EA0>亥女隸戊<E6888A>シ峨?
|
||||
### **4.2 异构系统身份映射 (Auth Bridge)**
|
||||
|
||||
* **REDCap Token 謇倡ョ。**<2A>壽ッ丈ク?CRC/PI 逧<>エヲ謌キ荳句刈蟇<E58888>ュ伜お蜈?REDCap API Token縲?
|
||||
* **莨∝セョ OpenID 扈大ョ<EFBFBD>**<2A>壼惠 iit\_schema.user\_mapping 荳ュ蟒コ遶?SystemUserID \<-\> WeComID 逧<EFBFBD>丐蟆<EFBFBD>シ檎。ョ菫晄カ域<EFBFBD>邊セ蜃<EFBFBD>耳騾√?
|
||||
## **5\. 謇ゥ螻墓ァ隶セ隶?(Future Roles)**
|
||||
* **REDCap Token 托管**:每个 CRC/PI 的账户下加密存储其 REDCap API Token。
|
||||
* **企微 OpenID 绑定**:在 iit\_schema.user\_mapping 中建立 SystemUserID \<-\> WeComID 的映射,确保消息精准推送。
|
||||
|
||||
蟇ケ莠<EFBFBD> **Co-PI** 謌?**Sub-I** 遲芽ァ定牡<E5AE9A>檎ウサ扈滓髪謖∝<E8AC96>?iit\_projects.roles 陦ィ荳ュ蜉ィ諤∵キサ蜉<EFBDBB>譚<EFBFBD>剞譬<E5899E>ュセ<EFBDAD><EFBDBE>
|
||||
## **5\. 扩展性设计 (Future Roles)**
|
||||
|
||||
* can\_approve\_shadow\_state: 襍倶コ亥ョ。謇ケ譚<EFBDB9>?
|
||||
* can\_view\_audit\_trail: 襍倶コ亥ョ。隶。譟・逵区揀縲?
|
||||
* can\_manage\_patients: 襍倶コ域ぅ閠<E38185>ョ。逅<EFBDA1>揀縲?
|
||||
**迚域悽隸エ譏<EFBDB4>**<2A>啖1.0 蝓コ遑迚?| **迥カ諤?*<2A>壼セ<E5A3BC>ッ<EFBFBD>ョ。
|
||||
对于 **Co-PI** 或 **Sub-I** 等角色,系统支持在 iit\_projects.roles 表中动态添加权限标签:
|
||||
|
||||
* can\_approve\_shadow\_state: 赋予审批权。
|
||||
* can\_view\_audit\_trail: 赋予审计查看权。
|
||||
* can\_manage\_patients: 赋予患者管理权。
|
||||
|
||||
**版本说明**:V1.0 基础版 | **状态**:待评审
|
||||
Reference in New Issue
Block a user