# 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 |