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,11 +1,11 @@
|
||||
# 隡<EFBFBD><EFBFBD>敺桐縑瘜典<EFBFBD>銝𡡞<EFBFBD>蝵格<EFBFBD><EFBFBD>?
|
||||
# 企业微信注册与配置指南
|
||||
|
||||
> **<EFBFBD>格<EFBFBD>**嚗朞繮<E69C9E>碶<EFBFBD>銝𡁜凝靽,PI<50>剛<EFBFBD>嚗𣬚鍂鈭穉IT Manager Agent<EFBFBD>煾<EFBFBD><EFBFBD>捶<EFBFBD>折<EFBFBD>霅血㨃<EFBFBD>?
|
||||
> **憸<EFBFBD>恣<EFBFBD>園𡢿**嚗?0<><30><EFBFBD>
|
||||
> **目标**:获取企业微信API凭证,用于IIT Manager Agent发送质控预警卡片
|
||||
> **预计时间**:20分钟
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 甇仿炊1嚗𡁏釣<F0A1818F>䔶<EFBFBD>銝𡁜凝靽∟揭<E2889F>?
|
||||
## 📋 步骤1:注册企业微信账号
|
||||
|
||||
### 1.1 访问企业微信官网
|
||||
|
||||
@@ -15,28 +15,28 @@
|
||||
|
||||
1. 点击"**立即注册**"
|
||||
2. 选择"**企业**"类型
|
||||
3. 憛怠<EFBFBD>隡<EFBFBD><EFBFBD>靽⊥<EFBFBD>嚗?
|
||||
- 隡<EFBFBD><EFBFBD><EFBFBD>滨妍嚗䫤瘚贝<EFBFBD><EFBFBD>駁堺`嚗<><E59A97><EFBFBD>函<EFBFBD>摰鮋<E691B0><E9AE8B>箸<EFBFBD><E7AEB8>滨妍嚗?
|
||||
3. 填写企业信息:
|
||||
- 企业名称:`测试医院`(或您的实际机构名称)
|
||||
- 行业类型:`医疗健康`
|
||||
- 企业人数:`100人以下`
|
||||
- 管理员姓名:您的姓名
|
||||
- 管理员手机:您的手机号(接收验证码)
|
||||
4. 摰峕<EFBFBD>撉諹<EFBFBD>嚗峕釣<EFBFBD>峕<EFBFBD><EFBFBD>?
|
||||
4. 完成验证,注册成功
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 甇仿炊2嚗𡁜<E59A97>撱箄䌊撱箏<E692B1><E7AE8F>?
|
||||
## 📋 步骤2:创建自建应用
|
||||
|
||||
### 2.1 登录管理后台
|
||||
|
||||
1. 访问:https://work.weixin.qq.com/wework_admin/loginpage_wx
|
||||
2. 雿輻鍂隡<EFBFBD><EFBFBD>敺桐縑APP<EFBFBD>怎<EFBFBD><EFBFBD>餃<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銁<EFBFBD>𧢲㦤銝𠹺<EFBFBD>頧賭<EFBFBD>銝𡁜凝靽,PP嚗?
|
||||
2. 使用企业微信APP扫码登录(需先在手机上下载企业微信APP)
|
||||
|
||||
### 2.2 创建应用
|
||||
|
||||
1. 餈𥕦<EFBFBD>**<2A>𣂼<EFBFBD><F0A382BC>函恣<E587BD><E681A3><EFBFBD>?* <20>?**<2A>鞱䌊撱箝<E692B1>?* <20>?**<2A>𣂼<EFBFBD>撱箏<E692B1><E7AE8F>具<EFBFBD>?*
|
||||
1. 进入**【应用管理】** → **【自建】** → **【创建应用】**
|
||||
|
||||
2. 憛怠<EFBFBD>摨𠉛鍂靽⊥<EFBFBD>嚗?
|
||||
2. 填写应用信息:
|
||||
- **应用名称**:`IIT Manager Agent(测试)`
|
||||
- **应用Logo**:上传一个图标(可暂时使用默认)
|
||||
- **应用介绍**:`IIT研究智能质控助手 - 数据质量实时监控`
|
||||
@@ -44,19 +44,19 @@
|
||||
|
||||
3. 点击"**创建应用**"
|
||||
|
||||
### 2.3 <EFBFBD>瑕<EFBFBD>API<EFBFBD>剛<EFBFBD>嚗<EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD>嚗?
|
||||
### 2.3 获取API凭证(重要!)
|
||||
|
||||
<EFBFBD>𥕦遣<EFBFBD>𣂼<EFBFBD><EFBFBD>𠬍<EFBFBD><EFBFBD>典<EFBFBD><EFBFBD>刻祕<EFBFBD><EFBFBD>△<EFBFBD>臭誑<EFBFBD>见<EFBFBD>嚗?
|
||||
创建成功后,在应用详情页可以看到:
|
||||
|
||||
```
|
||||
企业ID(CorpID): ww1234567890abcdef
|
||||
AgentID嚗? 1000002
|
||||
Secret嚗? <EFBFBD>孵稬"<22>亦<EFBFBD>"<22>厰僼<E58EB0>亦<EFBFBD>
|
||||
AgentID: 1000002
|
||||
Secret: 点击"查看"按钮查看
|
||||
```
|
||||
|
||||
**<EFBFBD>𩤃<EFBFBD> <20>滩<EFBFBD><E6BBA9>鞟內**嚗?
|
||||
**⚠️ 重要提示**:
|
||||
- **Secret** 只显示一次,请立即复制保存!
|
||||
- 憒<EFBFBD><EFBFBD>敹䁅扇Secret嚗屸<EFBFBD>閬<EFBFBD><EFBFBD>蝵殷<EFBFBD>隡𡁜紡<EFBFBD>湔唂Secret憭望<EFBFBD>嚗?
|
||||
- 如果忘记Secret,需要重置(会导致旧Secret失效)
|
||||
|
||||
---
|
||||
|
||||
@@ -64,10 +64,10 @@ Secret
|
||||
|
||||
### 3.1 设置网页授权及JS-SDK
|
||||
|
||||
1. <EFBFBD>典<EFBFBD><EFBFBD>刻祕<EFBFBD><EFBFBD>△嚗峕𪄳<EFBFBD>?**蝵煾△<E785BE><E296B3><EFBFBD><EFBFBD>蹆S-SDK**"
|
||||
2. 霈曄蔭**<2A>臭縑<E887AD>笔<EFBFBD>**嚗?
|
||||
1. 在应用详情页,找到"**网页授权及JS-SDK**"
|
||||
2. 设置**可信域名**:
|
||||
- 开发环境:`localhost`(如果支持)
|
||||
- <EFBFBD>煺漣<EFBFBD>臬<EFBFBD>嚗𡁏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㵪<EFBFBD>憒?`iit.example.com`嚗?
|
||||
- 生产环境:您的实际域名(如 `iit.example.com`)
|
||||
|
||||
### 3.2 设置接收消息
|
||||
|
||||
@@ -77,13 +77,13 @@ Secret
|
||||
### 3.3 设置权限范围
|
||||
|
||||
确保应用有以下权限:
|
||||
- <EFBFBD>?**<2A>煾<EFBFBD><E785BE><EFBFBD><EFBFBD>臬<EFBFBD>敺桐縑** - <EFBFBD>詨<EFBFBD><EFBFBD>蠘<EFBFBD>
|
||||
- <EFBFBD>?**<2A>𣂼<EFBFBD>靽⊥<E99DBD>霂餃<E99C82>** - <EFBFBD>其<EFBFBD><EFBFBD>瑕<EFBFBD><EFBFBD>冽<EFBFBD>OpenID
|
||||
- <EFBFBD>?**<2A>朞悖敶閧恣<E996A7>?* - <20>其<EFBFBD><E585B6>冽<EFBFBD><E586BD>惩<EFBFBD>
|
||||
- ✅ **发送消息到微信** - 核心功能
|
||||
- ✅ **成员信息读取** - 用于获取用户OpenID
|
||||
- ✅ **通讯录管理** - 用于用户映射
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 甇仿炊4嚗𡁻<E59A97>蝵桀<E89DB5>憿寧𤌍銝?
|
||||
## 📋 步骤4:配置到项目中
|
||||
|
||||
### 4.1 复制凭证
|
||||
|
||||
@@ -95,7 +95,7 @@ AgentID: 1000002
|
||||
Secret: abc123xyz789_your_secret_here
|
||||
```
|
||||
|
||||
### 4.2 瘛餃<EFBFBD><EFBFBD>?.env <EFBFBD><EFBFBD>辣
|
||||
### 4.2 添加到 .env 文件
|
||||
|
||||
编辑 `AIclinicalresearch/backend/.env`,添加:
|
||||
|
||||
@@ -106,9 +106,9 @@ WECHAT_CORP_SECRET=abc123xyz789_your_secret_here
|
||||
WECHAT_AGENT_ID=1000002
|
||||
```
|
||||
|
||||
**<EFBFBD>𩤃<EFBFBD> 瘜冽<E7989C>**嚗?
|
||||
- 銝滩<EFBFBD><EFBFBD>𣂷漱 `.env` <EFBFBD><EFBFBD>辣<EFBFBD>蚣it嚗<EFBFBD>歇<EFBFBD>?`.gitignore` 銝哨<EFBFBD>
|
||||
- <EFBFBD>煺漣<EFBFBD>臬<EFBFBD>雿輻鍂<EFBFBD>祉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝𡁜凝靽∪<EFBFBD><EFBFBD>?
|
||||
**⚠️ 注意**:
|
||||
- 不要提交 `.env` 文件到Git(已在 `.gitignore` 中)
|
||||
- 生产环境使用独立的企业微信应用
|
||||
|
||||
---
|
||||
|
||||
@@ -116,18 +116,18 @@ WECHAT_AGENT_ID=1000002
|
||||
|
||||
### 5.1 重启后端服务
|
||||
|
||||
靽嘥<EFBFBD> `.env` <EFBFBD>𠬍<EFBFBD><EFBFBD>滚鍳<EFBFBD>𡒊垢嚗?
|
||||
保存 `.env` 后,重启后端:
|
||||
|
||||
```bash
|
||||
# <EFBFBD>𨀣迫敶枏<EFBFBD><EFBFBD>滚𦛚嚗㇃trl+C嚗?
|
||||
# 停止当前服务(Ctrl+C)
|
||||
# 重新启动
|
||||
cd D:\MyCursor\AIclinicalresearch\backend
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 5.2 <EFBFBD>见𢆡瘚贝<EFBFBD>嚗<EFBFBD>蝙<EFBFBD>沌ostman<EFBFBD>鈪url嚗?
|
||||
### 5.2 手动测试(使用Postman或curl)
|
||||
|
||||
**瘚贝<EFBFBD>蝡舐<EFBFBD>**嚗<><E59A97>蝏胖ay 5隡𡁜<E99AA1>撱綽<E692B1>嚗?
|
||||
**测试端点**(后续Day 5会创建):
|
||||
|
||||
```bash
|
||||
POST http://localhost:3001/api/v1/iit/test/wechat-push
|
||||
@@ -136,73 +136,73 @@ Content-Type: application/json
|
||||
{
|
||||
"toUser": "YourUserID",
|
||||
"title": "测试通知",
|
||||
"description": "餈蹱糓銝<EFBFBD><EFBFBD>⊥䔉<EFBFBD>杷IT Manager<EFBFBD><EFBFBD><EFBFBD>霂閙<EFBFBD><EFBFBD>?,
|
||||
"description": "这是一条来自IIT Manager的测试消息",
|
||||
"url": "http://localhost:5173"
|
||||
}
|
||||
```
|
||||
|
||||
**憸<EFBFBD><EFBFBD>蝏𤘪<EFBFBD>**嚗?
|
||||
- <EFBFBD>?餈𥪜<E9A488>200<30>嗆<EFBFBD><E59786><EFBFBD>
|
||||
- <EFBFBD>?隡<><E99AA1>敺桐縑APP<50>嗅<EFBFBD><E59785>∠<EFBFBD>瘨<EFBFBD><E798A8>
|
||||
**预期结果**:
|
||||
- ✅ 返回200状态码
|
||||
- ✅ 企业微信APP收到卡片消息
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 撣貉<E692A3><E8B289>桅<EFBFBD>嚗㇅AQ嚗?
|
||||
## 📋 常见问题(FAQ)
|
||||
|
||||
### Q1嚗𡁏<EFBFBD>瘝⊥<EFBFBD>隡<EFBFBD><EFBFBD>嚗<EFBFBD>虾隞交釣<EFBFBD><EFBFBD><EFBFBD>嚗?
|
||||
### Q1:我没有企业,可以注册吗?
|
||||
|
||||
**A**嚗𡁜虾隞伐<E99A9E><E4BC90>㗇𥋘"**銝芯犖**"<22>?**銝芯<E98A9D>撌亙<E6928C><E4BA99>?*"蝐餃<E89D90>瘜典<E7989C>嚗<EFBFBD><E59A97><EFBFBD>賢<EFBFBD><E8B3A2>函㮾<E587BD>䎚<EFBFBD>?
|
||||
**A**:可以!选择"**个人**"或"**个体工商户**"类型注册,功能完全相同。
|
||||
|
||||
### Q2:Secret忘记了怎么办?
|
||||
|
||||
**A**嚗𡁜銁摨𠉛鍂霂行<E99C82>憿萇<E686BF><E89087>?**<EFBFBD>滨蔭Secret**"嚗䔶<E59A97>隡𡁜紡<F0A1819C>湔唂Secret憭望<EFBFBD><EFBFBD>?
|
||||
**A**:在应用详情页点击"**重置Secret**",但会导致旧Secret失效。
|
||||
|
||||
### Q3嚗𡁏<EFBFBD>霂閧㴓憓<EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD><EFBFBD>滩恕霂<EFBFBD><EFBFBD>嚗?
|
||||
### Q3:测试环境需要实名认证吗?
|
||||
|
||||
**A**嚗帋<E59A97><E5B88B><EFBFBD>閬<EFBFBD><E996AC><EFBFBD>𧊋霈方<E99C88>隡<EFBFBD><E99AA1>銋笔虾隞乩蝙<E4B9A9>刻䌊撱箏<E692B1><E7AE8F>函<EFBFBD><E587BD>券<EFBFBD><E588B8>蠘<EFBFBD>嚗<EFBFBD>蘨<EFBFBD>臭犖<E887AD>唳<EFBFBD><E594B3>𣂼<EFBFBD>嚗?00鈭綽<E988AD><E7B6BD>?
|
||||
**A**:不需要。未认证企业也可以使用自建应用的全部功能,只是人数有限制(100人)。
|
||||
|
||||
### Q4嚗𡁜<EFBFBD>雿閙𪄳<EFBFBD>啁鍂<EFBFBD>瑞<EFBFBD> UserID嚗?
|
||||
### Q4:如何找到用户的 UserID?
|
||||
|
||||
**A**嚗?
|
||||
1. <EFBFBD>寞<EFBFBD>1嚗𡁶蒈敶閧恣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?<3F>朞悖敶?<3F>?<3F>孵稬<E5ADB5>𣂼<EFBFBD> <20>?<3F>亦<EFBFBD>"韐血噡"
|
||||
**A**:
|
||||
1. 方法1:登录管理后台 → 通讯录 → 点击成员 → 查看"账号"
|
||||
2. 方法2:调用企业微信API获取:`GET /cgi-bin/user/getuserinfo`
|
||||
|
||||
### Q5嚗𡁏<EFBFBD><EFBFBD>臬<EFBFBD><EFBFBD><EFBFBD>仃韐伐<EFBFBD>餈𥪜<EFBFBD>40014<EFBFBD>躰秤嚗?
|
||||
### Q5:消息发送失败,返回40014错误?
|
||||
|
||||
**A**:`invalid access_token`,可能原因:
|
||||
- Secret配置错误
|
||||
- Access Token餈<EFBFBD><EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>齿鰵<EFBFBD>瑕<EFBFBD>嚗?
|
||||
- Access Token过期(需重新获取)
|
||||
- CorpID或AgentID配置错误
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>?撉峕𤣰<E5B395><F0A4A3B0><EFBFBD>
|
||||
## ✅ 验收标准
|
||||
|
||||
摰峕<EFBFBD>隞乩<EFBFBD>隞餃𦛚<EFBFBD>𠬍<EFBFBD>Day 1撠勗<E692A0>蝢擧𤣰摰䀝<E691B0>嚗?
|
||||
完成以下任务后,Day 1就完美收官了:
|
||||
|
||||
- [ ] 企业微信账号注册成功
|
||||
- [ ] 自建应用创建成功
|
||||
- [ ] 获取到CorpID、AgentID、Secret
|
||||
- [ ] <20>滨蔭<E6BBA8>?`.env` <20><>辣
|
||||
- [ ] 配置到 `.env` 文件
|
||||
- [ ] 后端服务能正常启动(无报错)
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>㴓 銝衤<E98A9D>甇?
|
||||
## 🎯 下一步
|
||||
|
||||
完成企业微信配置后,Day 2我们将开始:
|
||||
|
||||
1. **REDCap API Adapter撘<EFBFBD><EFBFBD>?*嚗<>瓲敹<E793B2><E695B9><EFBFBD>踝<EFBFBD>
|
||||
2. **SyncManager撘<EFBFBD><EFBFBD>?*嚗<>毽<EFBFBD><E6AFBD><EFBFBD>甇交芋撘𧶏<E69298>
|
||||
3. 摰䂿緵REDCap<EFBFBD>唳旿<EFBFBD>匧<EFBFBD><EFBFBD>諹蔭霂?
|
||||
1. **REDCap API Adapter开发**(核心功能)
|
||||
2. **SyncManager开发**(混合同步模式)
|
||||
3. 实现REDCap数据拉取和轮询
|
||||
|
||||
憸<EFBFBD>恣摰峕<EFBFBD><EFBFBD>園𡢿嚗?撠𤩺𧒄
|
||||
预计完成时间:8小时
|
||||
|
||||
---
|
||||
|
||||
**<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>**嚗?025-12-31
|
||||
**蝏湔擪<EFBFBD>?*嚗𡁜<E59A97><F0A1819C>穃𣪧<E7A983>?
|
||||
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>獢?*嚗?
|
||||
**创建日期**:2025-12-31
|
||||
**维护者**:开发团队
|
||||
**参考文档**:
|
||||
- 企业微信官方文档:https://developer.work.weixin.qq.com/document/
|
||||
- 发送应用消息:https://developer.work.weixin.qq.com/document/path/90236
|
||||
|
||||
@@ -225,6 +225,5 @@ Content-Type: application/json
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user