Files
hms/docs/qa/role-test-results/SUMMARY.md
iven 6d5a711d2c
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
fix: 修复测试发现的 7 个问题 + 全 workspace clippy 清零
功能修复:
1. 患者创建空名称验证:后端添加 name.trim().is_empty() 检查
2. 仪表盘统计容错:单个查询失败返回零值而非 500
3. FHIR 路由修复:从 /fhir 移到 /api/v1/fhir 保持一致
4. 冻结模块后端中间件:新增 frozen_module_middleware 拦截冻结路径
5. 积分端点权限码:health.health-data.list → health.points.list
6. 角色权限迁移:护士补充 devices.list,运营补充 points.list/manage
7. 测试结果文档:R01-R05 角色测试 + T00/T10 结果归档

Clippy 全 workspace 清零(14→0 errors):
- erp-core: 修复 empty doc line、collapsible if、redundant closure 等 9 处
- erp-health: 修复 too_many_arguments、unused var、unnecessary parens 等 58 处
- erp-ai: 修复 dead_code、unused import 等 11 处
- erp-plugin: 修复 too_many_arguments、wildcard pattern 等 11 处
- erp-server-migration: 修复 enum_variant_names 5 处
- erp-auth/config/workflow/message: 各 1-3 处

工程改进:
- lint-staged 配置迁移到 .lintstagedrc.js(函数式避免文件列表传给 clippy)
- cargo fmt 统一格式化
2026-05-07 23:43:14 +08:00

105 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 5 角色业务场景测试 — 综合报告
> 测试日期: 2026-05-06 | 测试人: Claude | 环境: 本地 dev
> 测试方法: 全部通过浏览器前端操作Chrome DevTools MCP包含实际 CRUD 交互
## 1. 总览
| 角色 | 账号 | 测试项 | PASS | FAIL | ISSUE | 通过率 |
|------|------|--------|------|------|-------|--------|
| R01 Admin | admin / Admin@2026 | 48 | 47 | 1 | 1 | **97.9%** |
| R02 Doctor | doctor_test | 35 | 28 | 7 | 1 | **80.0%** |
| R03 Nurse | nurse_test | 31 | 24 | 7 | 1 | **77.4%** |
| R04 Health Manager | health_manager_test | 33 | 26 | 6 | 2 | **78.8%** |
| R05 Operator | operator_test | 28 | 23 | 5 | 0 | **82.1%** |
| **合计** | | **175** | **148** | **26** | **5** | **84.6%** |
## 2. 共性问题(跨角色复现)
### P1 — 权限边界绕过HIGH, 影响全部 4 个非 admin 角色)
**现象**: 非 admin 角色通过地址栏直接输入 URL 可访问受限页面,页面不加拦截正常加载。
**影响范围**:
- `/users` — 4 个角色均可访问(显示空数据而非 403
- `/settings` — 4 个角色均可完整访问8个Tab全部可操作
- `/health/points-rules` — doctor/nurse/HM 可访问operator 是业务权限)
- `/health/articles` — doctor/nurse/HM 可访问operator 是业务权限)
- `/health/tags` — doctor/nurse/HM 可访问operator/nurse 是业务权限)
- `/health/doctors` — nurse/operator 可访问
- `/health/follow-up-tasks` — operator 可访问
- `/health/consultations` — operator 可访问
- `/health/action-inbox` — operator 可访问
- `/plugins/admin` — HM 可访问
**正确拦截的页面**(对比):
- `/health/ai-analysis` — nurse/operator 正确显示"权限不足"
- `/health/diagnoses` — operator 正确显示"权限不足"
- `/health/consents` — operator 正确显示"权限不足"
- `/health/ble-gateways` — doctor/HM 正确显示"权限不足"
**根因分析**: 前端路由守卫未对全部受限路由做权限码校验。部分页面组件内置了权限检查AI分析、诊断、知情同意、BLE网关但大部分页面仅依赖侧栏菜单隐藏来限制访问。
**建议修复**: 在前端路由层增加全局 `beforeEach` 守卫,对每个路由的 `meta.permissions` 与用户权限码做比对,未授权时统一跳转 403 页面。
### P2 — 随访状态筛选不生效MEDIUM, 全角色复现)
**现象**: 随访管理页面的状态筛选下拉框选择后UI 更新显示选中标签,但列表数据不过滤。
**影响**: R01 B.2, R02 B.2, R03 B.2, R04 B.2 — 4 个角色共 4 个 FAIL。
**建议修复**: 检查 FollowUpList 组件的筛选逻辑,确认 `onStatusChange` 是否正确触发 API 请求参数更新。
### P3 — 告警详情无操作按钮MEDIUM, 全角色复现)
**现象**: 告警仪表盘中点击 pending 告警,详情面板只显示 ID/score/severity无"确认"/"处理"按钮。
**影响**: R01 D.3, R02 D.1, R03 D.3, R04 D.3 — 4 个 ISSUE。
**建议修复**: 告警详情组件增加操作按钮(需后端配合告警状态流转 API
## 3. 角色专属发现
### R01 Admin
- 整体功能完整47/48 通过
- 咨询详情患者名显示"未知"minor
- 创建了测试数据患者R01、文章、商品、活动
### R02 Doctor
- 仪表盘 AI 建议采纳按钮跳转页面而非行内操作UX 可改进)
- 医生工作台功能完整患者管理、随访、咨询、告警、AI分析均正常
### R03 Nurse
- "随访监控台"仪表盘设计良好:今日统计、待办列表、快捷操作
- 患者新建和随访创建均正常
- 咨询列表正确隐藏了管理按钮(只读)
### R04 Health Manager
- "今日任务流"仪表盘聚焦待办处理
- 权限范围最广的非 admin 角色AI分析、随访模板、危急值阈值均可见
- 日常监测页面空白(可能需关联数据)
### R05 Operator
- 运营仪表盘设计完善AI摘要、积分动态、内容矩阵
- **患者列表正确隐藏了"新建患者"按钮**patient.list vs patient.manage 区分正确)
- 权限边界拦截相对最好4/9 页面正确返回 403
- 登录后出现"服务器异常"toast非阻塞
## 4. 测试数据创建汇总
| 角色 | 创建的数据 |
|------|-----------|
| R01 Admin | 患者"测试患者R01"、文章"R01测试文章-健康饮食"、商品"R01测试商品-健康礼包"、活动"R01测试-血压管理讲座"、咨询回复 |
| R03 Nurse | 患者"测试患者R03"、随访"电话随访 测试患者R03 2026-05-10" |
## 5. 优先修复建议
| 优先级 | 问题 | 影响范围 | 建议 |
|--------|------|----------|------|
| **P0** | 权限边界绕过 | 4角色 × 5-7 页面 | 路由守卫 + 后端 API 权限中间件双保险 |
| **P1** | 随访筛选不生效 | 4角色 | FollowUpList 组件筛选逻辑修复 |
| **P1** | 告警无操作按钮 | 4角色 | 告警详情组件 + 状态流转 API |
| **P2** | 咨询患者名"未知" | R01 | 咨询列表 API 返回 patient_name |
| **P2** | AI建议采纳UX | R02 | 仪表盘改为行内采纳操作 |
| **P3** | 日常监测空白 | R04 | 确认数据关联或提供降级 UI |