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,40 +1,40 @@
|
||||
# ASL 娴嬭瘯鏁版嵁闆?
|
||||
# ASL 测试数据集
|
||||
|
||||
> **鍒涘缓鏃ユ湡锛?* 2025-11-15
|
||||
> **缁存姢浜猴細** ASL 寮€鍙戝洟闃?
|
||||
> **鐢ㄩ€旓細** 鐢ㄤ簬娴嬭瘯 AI 鏅鸿兘鏂囩尞妯″潡鐨勫噯纭<E599AF>巼鍜岃川閲?
|
||||
> **创建日期:** 2025-11-15
|
||||
> **维护人:** ASL 开发团队
|
||||
> **用途:** 用于测试 AI 智能文献模块的准确率和质量
|
||||
|
||||
---
|
||||
|
||||
## 馃搵 鏁版嵁闆嗘<E99786>瑙?
|
||||
## 📋 数据集概览
|
||||
|
||||
鏈<EFBFBD>洰褰曞寘鍚<EFBFBD>敤浜庢祴璇?ASL 妯″潡鍚勯」鍔熻兘鐨勬祴璇曟暟鎹<E69A9F>泦锛屽寘鎷<E5AF98>細
|
||||
本目录包含用于测试 ASL 模块各项功能的测试数据集,包括:
|
||||
|
||||
| 娴嬭瘯绫诲瀷 | 鏂囦欢澶?| 鏁版嵁閲?| 鐘舵€?|
|
||||
| 测试类型 | 文件夹 | 数据量 | 状态 |
|
||||
|---------|--------|--------|------|
|
||||
| **鏍囬<EFBFBD>鎽樿<EFBFBD>鍒濈瓫** | `screening/` | 199 绡?| 鉁?寰呭<E5AFB0>鍏?|
|
||||
| **PDF 鍏ㄦ枃鎻愬彇** | `pdf-extraction/` | 寰呰ˉ鍏?| 鈴?寰呰ˉ鍏?|
|
||||
| **标题摘要初筛** | `screening/` | 199 篇 | ✅ 待导入 |
|
||||
| **PDF 全文提取** | `pdf-extraction/` | 待补充 | ⏳ 待补充 |
|
||||
|
||||
---
|
||||
|
||||
## 馃搧 鏂囦欢澶圭粨鏋?
|
||||
## 📁 文件夹结构
|
||||
|
||||
```
|
||||
03-测试数据/
|
||||
鈹溾攢鈹€ README.md 鈫?褰撳墠鏂囦欢
|
||||
鈹?
|
||||
鈹溾攢鈹€ screening/ 鈫?鏍囬<E98F8D>鎽樿<E98EBD>鍒濈瓫娴嬭瘯鏁版嵁
|
||||
鈹? 鈹溾攢鈹€ literature-list-199.xlsx 鈫?199 绡囨枃鐚<EFBFBD>垪琛<EFBFBD>紙鏍囬<EFBFBD>+鎽樿<E98EBD>锛?
|
||||
鈹? 鈹溾攢鈹€ picos-criteria.txt 鈫?PICOS 鏍囧噯瀹氫箟
|
||||
鈹? 鈹溾攢鈹€ inclusion-criteria.txt 鈫?绾冲叆鏍囧噯
|
||||
鈹? 鈹溾攢鈹€ exclusion-criteria.txt 鈫?鎺掗櫎鏍囧噯
|
||||
鈹? 鈹斺攢鈹€ gold-standard.json 鈫?浜哄伐鏍囨敞鐨勬<E990A8>纭<EFBFBD>粨鏋滐紙閲戞爣鍑嗭級
|
||||
鈹?
|
||||
鈹斺攢鈹€ pdf-extraction/ 鈫?PDF 鍏ㄦ枃鎻愬彇娴嬭瘯鏁版嵁
|
||||
鈹溾攢鈹€ sample-01-rct.pdf 鈫?RCT 鐮旂┒鏍锋湰
|
||||
鈹溾攢鈹€ sample-02-cohort.pdf 鈫?闃熷垪鐮旂┒鏍锋湰
|
||||
鈹溾攢鈹€ sample-03-with-tables.pdf 鈫?鍖呭惈澶嶆潅琛ㄦ牸鐨勬牱鏈?
|
||||
鈹溾攢鈹€ sample-04-chinese.pdf 鈫?涓<>枃鏂囩尞鏍锋湰
|
||||
├── README.md ← 当前文件
|
||||
│
|
||||
├── screening/ ← 标题摘要初筛测试数据
|
||||
│ ├── literature-list-199.xlsx ← 199 篇文献列表(标题+摘要)
|
||||
│ ├── picos-criteria.txt ← PICOS 标准定义
|
||||
│ ├── inclusion-criteria.txt ← 纳入标准
|
||||
│ ├── exclusion-criteria.txt ← 排除标准
|
||||
│ └── gold-standard.json ← 人工标注的正确结果(金标准)
|
||||
│
|
||||
└── pdf-extraction/ ← PDF 全文提取测试数据
|
||||
├── sample-01-rct.pdf ← RCT 研究样本
|
||||
├── sample-02-cohort.pdf ← 队列研究样本
|
||||
├── sample-03-with-tables.pdf ← 包含复杂表格的样本
|
||||
├── sample-04-chinese.pdf ← 中文文献样本
|
||||
└── README.md
|
||||
```
|
||||
|
||||
@@ -44,18 +44,18 @@
|
||||
|
||||
### 1. 导入测试数据
|
||||
|
||||
**璇锋寜浠ヤ笅姝ラ<EFBFBD>瀵煎叆鎮ㄧ殑娴嬭瘯鏁版嵁锛?*
|
||||
**请按以下步骤导入您的测试数据:**
|
||||
|
||||
#### 锛?锛夋爣棰樻憳瑕佸垵绛涙祴璇曟暟鎹?
|
||||
#### (1)标题摘要初筛测试数据
|
||||
|
||||
**鏂囦欢娓呭崟锛?*
|
||||
- `literature-list-199.xlsx`锛?99 绡囪嫳鏂囨枃鐚<EFBFBD>垪琛?
|
||||
- `picos-criteria.txt`锛歅ICOS 鏍囧噯锛圥opulation, Intervention, Comparison, Outcome, Study Design锛?
|
||||
**文件清单:**
|
||||
- `literature-list-199.xlsx`:199 篇英文文献列表
|
||||
- `picos-criteria.txt`:PICOS 标准(Population, Intervention, Comparison, Outcome, Study Design)
|
||||
- `gold-standard.json`:人工标注的正确结果
|
||||
|
||||
**Excel 鏂囦欢鏍煎紡瑕佹眰锛?*
|
||||
**Excel 文件格式要求:**
|
||||
```
|
||||
鍒楀悕锛堝繀椤伙級锛?
|
||||
列名(必须):
|
||||
- Title(标题)
|
||||
- Abstract(摘要)
|
||||
- DOI(可选)
|
||||
@@ -63,33 +63,33 @@
|
||||
- Year(年份,可选)
|
||||
- Journal(期刊,可选)
|
||||
|
||||
绀轰緥锛?
|
||||
示例:
|
||||
| Title | Abstract | DOI | Authors | Year | Journal |
|
||||
|--------------------------------|---------------------------|---------------|--------------|------|---------|
|
||||
| Effect of aspirin on ... | Background: ... | 10.1038/... | Smith J, ... | 2020 | NEJM |
|
||||
```
|
||||
|
||||
**PICOS 鏍囧噯鏍煎紡锛?*
|
||||
**PICOS 标准格式:**
|
||||
```txt
|
||||
# PICOS 标准
|
||||
|
||||
## Population(人群)
|
||||
- 鎴愬勾楂樿<EFBFBD>鍘嬫偅鑰咃紙骞撮緞 鈮?18 宀侊級
|
||||
- 成年高血压患者(年龄 ≥ 18 岁)
|
||||
- 无心血管疾病史
|
||||
|
||||
## Intervention(干预)
|
||||
- 每日服用阿司匹林 100mg
|
||||
|
||||
## Comparison(对照)
|
||||
- 瀹夋叞鍓傛垨鏃犳不鐤?
|
||||
- 安慰剂或无治疗
|
||||
|
||||
## Outcome锛堢粨灞€锛?
|
||||
## Outcome(结局)
|
||||
- 主要结局:心血管事件发生率
|
||||
- 次要结局:全因死亡率
|
||||
|
||||
## Study Design(研究设计)
|
||||
- 闅忔満瀵圭収璇曢獙锛圧CT锛?
|
||||
- 闃熷垪鐮旂┒锛圕ohort Study锛?
|
||||
- 随机对照试验(RCT)
|
||||
- 队列研究(Cohort Study)
|
||||
```
|
||||
|
||||
**金标准格式(JSON):**
|
||||
@@ -107,33 +107,33 @@
|
||||
"doi": "10.1038/nature12373",
|
||||
"title": "...",
|
||||
"decision": "include",
|
||||
"reason": "绗﹀悎 PICO 鏍囧噯锛氫汉缇や负鎴愬勾楂樿<EFBFBD>鍘嬫偅鑰咃紝骞查<EFBFBD>涓洪樋鍙稿尮鏋?..",
|
||||
"reason": "符合 PICO 标准:人群为成年高血压患者,干预为阿司匹林...",
|
||||
"confidence": 1.0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"decision": "exclude",
|
||||
"reason": "涓嶇<EFBFBD>鍚堢撼鍏ユ爣鍑嗭細浜虹兢涓哄効绔ユ偅鑰?,
|
||||
"reason": "不符合纳入标准:人群为儿童患者",
|
||||
"confidence": 0.95
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### 锛?锛塒DF 鍏ㄦ枃鎻愬彇娴嬭瘯鏁版嵁
|
||||
#### (2)PDF 全文提取测试数据
|
||||
|
||||
**建议准备的样本类型:**
|
||||
- RCT 研究(随机对照试验)
|
||||
- 闃熷垪鐮旂┒锛圕ohort Study锛?
|
||||
- 鍖呭惈澶嶆潅琛ㄦ牸鐨勬枃鐚?
|
||||
- 鍖呭惈鏁板<EFBFBD>鍏<EFBFBD>紡鐨勬枃鐚?
|
||||
- 队列研究(Cohort Study)
|
||||
- 包含复杂表格的文献
|
||||
- 包含数学公式的文献
|
||||
- 中文医学文献(测试语言检测)
|
||||
|
||||
**鏍锋湰鏁伴噺寤鸿<EFBFBD>锛?* 5-10 绡?
|
||||
**样本数量建议:** 5-10 篇
|
||||
|
||||
### 2. 运行测试
|
||||
|
||||
#### 锛?锛夋爣棰樻憳瑕佸垵绛涙祴璇?
|
||||
#### (1)标题摘要初筛测试
|
||||
|
||||
```bash
|
||||
# 进入后端目录
|
||||
@@ -147,22 +147,22 @@ npm run test:asl:screening
|
||||
npm run dev
|
||||
|
||||
# 2. 通过前端上传 literature-list-199.xlsx
|
||||
# 3. 閰嶇疆 PICOS 鏍囧噯锛堝<EFBFBD>鍒?picos-criteria.txt 鍐呭<EFBFBD>锛?
|
||||
# 4. 杩愯<EFBFBD>鎵归噺绛涢€?
|
||||
# 3. 配置 PICOS 标准(复制 picos-criteria.txt 内容)
|
||||
# 4. 运行批量筛选
|
||||
# 5. 导出结果,与 gold-standard.json 对比
|
||||
```
|
||||
|
||||
#### 锛?锛夎瘎浼板噯纭<E599AF>巼
|
||||
#### (2)评估准确率
|
||||
|
||||
```bash
|
||||
# 鑷<EFBFBD>姩璇勪及鍑嗙‘鐜囷紙涓庨噾鏍囧噯瀵规瘮锛?
|
||||
# 自动评估准确率(与金标准对比)
|
||||
npm run test:asl:evaluate -- \
|
||||
--result ./screening-result.json \
|
||||
--gold-standard ./gold-standard.json
|
||||
|
||||
# 杈撳嚭绀轰緥锛?
|
||||
# 鉁?鍑嗙‘鐜? 92.5%
|
||||
# 鉁?涓€鑷寸巼: 88.9%
|
||||
# 输出示例:
|
||||
# ✅ 准确率: 92.5%
|
||||
# ✅ 一致率: 88.9%
|
||||
# ⚠️ 假阳性率: 5.2%
|
||||
# ⚠️ 假阴性率: 2.3%
|
||||
```
|
||||
@@ -171,43 +171,43 @@ npm run test:asl:evaluate -- \
|
||||
|
||||
| 指标 | MVP 目标 | V1.0 目标 | V2.0 目标 |
|
||||
|------|---------|----------|----------|
|
||||
| **鍑嗙‘鐜?* | 鈮?85% | 鈮?90% | 鈮?95% |
|
||||
| **涓€鑷寸巼**锛堝弻妯″瀷锛?| 鈮?80% | 鈮?85% | 鈮?90% |
|
||||
| **鍋囬槼鎬х巼** | 鈮?10% | 鈮?5% | 鈮?3% |
|
||||
| **鍋囬槾鎬х巼** | 鈮?5% | 鈮?3% | 鈮?2% |
|
||||
| **准确率** | ≥ 85% | ≥ 90% | ≥ 95% |
|
||||
| **一致率**(双模型) | ≥ 80% | ≥ 85% | ≥ 90% |
|
||||
| **假阳性率** | ≤ 10% | ≤ 5% | ≤ 3% |
|
||||
| **假阴性率** | ≤ 5% | ≤ 3% | ≤ 2% |
|
||||
|
||||
---
|
||||
|
||||
## 📊 测试数据统计
|
||||
|
||||
### 鏍囬<EFBFBD>鎽樿<EFBFBD>鍒濈瓫鏁版嵁闆?
|
||||
### 标题摘要初筛数据集
|
||||
|
||||
**鍩烘湰淇℃伅锛?*
|
||||
- **鎬绘暟閲?*: 199 绡?
|
||||
**基本信息:**
|
||||
- **总数量**: 199 篇
|
||||
- **数据来源**: [请填写数据来源]
|
||||
- **领域**: 医学/临床研究
|
||||
- **语言**: 英文
|
||||
- **年份范围**: [请填写]
|
||||
|
||||
**棰勬湡鍒嗗竷锛?*
|
||||
**预期分布:**
|
||||
```
|
||||
绾冲叆锛圛nclude锛? ~45 绡囷紙23%锛?
|
||||
鎺掗櫎锛圗xclude锛? ~132 绡囷紙66%锛?
|
||||
涓嶇‘瀹氾紙Uncertain锛? ~22 绡囷紙11%锛?
|
||||
纳入(Include): ~45 篇(23%)
|
||||
排除(Exclude): ~132 篇(66%)
|
||||
不确定(Uncertain): ~22 篇(11%)
|
||||
```
|
||||
|
||||
**鐮旂┒绫诲瀷鍒嗗竷锛堥<EFBFBD>浼帮級锛?*
|
||||
**研究类型分布(预估):**
|
||||
```
|
||||
RCT: ~60 绡囷紙30%锛?
|
||||
闃熷垪鐮旂┒: ~50 绡囷紙25%锛?
|
||||
鐥呬緥瀵圭収: ~30 绡囷紙15%锛?
|
||||
妯<EFBFBD>柇闈㈢爺绌? ~30 绡囷紙15%锛?
|
||||
鍏朵粬: ~29 绡囷紙15%锛?
|
||||
RCT: ~60 篇(30%)
|
||||
队列研究: ~50 篇(25%)
|
||||
病例对照: ~30 篇(15%)
|
||||
横断面研究: ~30 篇(15%)
|
||||
其他: ~29 篇(15%)
|
||||
```
|
||||
|
||||
### PDF 鍏ㄦ枃鎻愬彇鏁版嵁闆?
|
||||
### PDF 全文提取数据集
|
||||
|
||||
**寰呰ˉ鍏?*
|
||||
**待补充**
|
||||
|
||||
---
|
||||
|
||||
@@ -215,40 +215,40 @@ RCT: ~60 篇(30%
|
||||
|
||||
### 1. 版权声明
|
||||
|
||||
- 鏈<EFBFBD>祴璇曟暟鎹<EFBFBD>泦浠呯敤浜?ASL 妯″潡寮€鍙戝拰娴嬭瘯
|
||||
- 涓嶅緱鐢ㄤ簬鍟嗕笟鐢ㄩ€?
|
||||
- 涓嶅緱鍏<EFBFBD>紑鍒嗗彂鎴栦紶鎾?
|
||||
- 璇烽伒瀹堝師鏂囩尞鐨勭増鏉冭<EFBFBD>鍙?
|
||||
- 本测试数据集仅用于 ASL 模块开发和测试
|
||||
- 不得用于商业用途
|
||||
- 不得公开分发或传播
|
||||
- 请遵守原文献的版权许可
|
||||
|
||||
### 2. 数据隐私
|
||||
|
||||
- 纭<EFBFBD>繚娴嬭瘯鏁版嵁涓嶅寘鍚<EFBFBD>晱鎰熶俊鎭?
|
||||
- 濡傚寘鍚<EFBFBD>偅鑰呮暟鎹<EFBFBD>紝蹇呴』宸茶劚鏁忓<EFBFBD>鐞?
|
||||
- 閬靛畧 GDPR銆丠IPAA 绛夋暟鎹<EFBFBD>繚鎶ゆ硶瑙?
|
||||
- 确保测试数据不包含敏感信息
|
||||
- 如包含患者数据,必须已脱敏处理
|
||||
- 遵守 GDPR、HIPAA 等数据保护法规
|
||||
|
||||
### 3. 质量要求
|
||||
|
||||
- **金标准必须由医学专家标注**
|
||||
- 标注人需具备相关领域专业知识
|
||||
- 鏍囨敞杩囩▼闇€鏈夎川閲忔帶鍒舵満鍒?
|
||||
- 寤鸿<EFBFBD>鍙屼汉鐙<EFBFBD>珛鏍囨敞锛屽啿绐侀渶绗<EFBFBD>笁鏂逛徊瑁?
|
||||
- 标注过程需有质量控制机制
|
||||
- 建议双人独立标注,冲突需第三方仲裁
|
||||
|
||||
---
|
||||
|
||||
## 🔄 数据更新记录
|
||||
|
||||
| 鏃ユ湡 | 鏇存柊鍐呭<E98D90> | 鏇存柊浜?|
|
||||
| 日期 | 更新内容 | 更新人 |
|
||||
|------|---------|--------|
|
||||
| 2025-11-15 | 创建测试数据目录结构 | ASL 团队 |
|
||||
| 寰呮洿鏂?| 瀵煎叆 199 绡囨枃鐚<E69E83>祴璇曟暟鎹?| - |
|
||||
| 寰呮洿鏂?| 娣诲姞 PDF 鏍锋湰鏁版嵁 | - |
|
||||
| 待更新 | 导入 199 篇文献测试数据 | - |
|
||||
| 待更新 | 添加 PDF 样本数据 | - |
|
||||
|
||||
---
|
||||
|
||||
## 📞 联系方式
|
||||
|
||||
濡傛湁闂<EFBFBD><EFBFBD>锛岃<EFBFBD>鑱旂郴锛?
|
||||
- **椤圭洰璐熻矗浜?*: [濮撳悕]
|
||||
如有问题,请联系:
|
||||
- **项目负责人**: [姓名]
|
||||
- **邮箱**: [邮箱]
|
||||
- **文档维护**: [文档路径]
|
||||
|
||||
@@ -258,15 +258,15 @@ RCT: ~60 篇(30%
|
||||
|
||||
- [标题摘要初筛测试用例](../02-标题摘要初筛测试用例.md)
|
||||
- [测试计划](../01-测试计划.md)
|
||||
- [鏂囩尞澶勭悊鎶€鏈<EFBFBD>€夊瀷](../../02-鎶€鏈<E282AC><E98F88>璁?07-鏂囩尞澶勭悊鎶€鏈<E282AC>€夊瀷.md)
|
||||
- [璐ㄩ噺淇濋殰涓庡彲杩芥函绛栫暐](../../02-鎶€鏈<E282AC><E98F88>璁?06-璐ㄩ噺淇濋殰涓庡彲杩芥函绛栫暐.md)
|
||||
- [文献处理技术选型](../../02-技术设计/07-文献处理技术选型.md)
|
||||
- [质量保障与可追溯策略](../../02-技术设计/06-质量保障与可追溯策略.md)
|
||||
|
||||
---
|
||||
|
||||
**下一步行动:**
|
||||
1. 鉁?鍒涘缓娴嬭瘯鏁版嵁鐩<E5B581>綍缁撴瀯
|
||||
2. 鈴?瀵煎叆鎮ㄧ殑 199 绡囨枃鐚<E69E83>祴璇曟暟鎹<E69A9F>紙`literature-list-199.xlsx`锛?
|
||||
3. 鈴?鍒涘缓 PICOS 鏍囧噯鏂囦欢锛坄picos-criteria.txt`锛?
|
||||
4. 鈴?鍑嗗<E98D91>閲戞爣鍑嗘爣娉<E788A3>紙`gold-standard.json`锛?
|
||||
5. 鈴?琛ュ厖 PDF 鏍锋湰鏁版嵁
|
||||
1. ✅ 创建测试数据目录结构
|
||||
2. ⏳ 导入您的 199 篇文献测试数据(`literature-list-199.xlsx`)
|
||||
3. ⏳ 创建 PICOS 标准文件(`picos-criteria.txt`)
|
||||
4. ⏳ 准备金标准标注(`gold-standard.json`)
|
||||
5. ⏳ 补充 PDF 样本数据
|
||||
|
||||
|
||||
Reference in New Issue
Block a user