功能修复: 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 统一格式化
5.1 KiB
5.1 KiB
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 |