fix(web): 修复角色测试发现的权限守卫、API 500、权限配置问题
Some checks failed
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled

1. CRITICAL: 前端路由权限守卫 — routePermissions 从 3 条扩展到 31 条,
   覆盖全部 /health/* 路由;匹配逻辑从宽松模块级前缀改为精确权限码匹配
2. HIGH: health-data API 500 — jsonb_array_elements() 添加 CASE WHEN 类型守卫,
   防止 items 字段为非数组 JSON 时崩溃
3. MEDIUM: Doctor 补充 ai.prompt.list、ai.usage.list、follow-up-templates 权限
4. Operator 清理 AI 分析、统计报表菜单关联
5. 更新 5 角色测试计划文档
This commit is contained in:
iven
2026-05-06 22:29:54 +08:00
parent 5467394ffe
commit 43f0ba7057
9 changed files with 608 additions and 302 deletions

View File

@@ -1,80 +1,118 @@
# R05 — Operator运营人员测试计划
# R05 — Operator运营人员业务场景测试计划
> 角色: operator | 测试账号: operator_test / Admin@2026 | 菜单数: 24
> 角色: operator | 测试账号: operator_test / Admin@2026 | 菜单数: 24 | 重点: 内容运营与积分商城
## 1. 登录 & 仪表盘
| # | 测试项 | 操作 | 预期结果 | 通过 |
|---|--------|------|----------|------|
| 1.1 | 登录 | 输入 operator_test / Admin@2026 | 成功登录,左侧菜单显示 24 个菜单项 | ☐ |
| 1.2 | 菜单过滤 | 检查左侧菜单 | **有**: 工作台、统计报表、消息中心、患者管理、标签管理、积分规则、商品管理、订单管理、线下活动、内容管理、设备管理、告警仪表盘、AI用量 | ☐ |
| 1.3 | 菜单排除 | 检查左侧菜单 | **没有**: 用户管理、权限管理、组织架构、工作流、系统设置、插件管理、医护管理、随访管理、咨询管理、行动收件箱、随访模板、诊断记录、知情同意、实时监控、BLE网关、危急值阈值、AI分析、AI Prompt、OAuth | ☐ |
| 1.4 | 运营仪表盘 | 查看首页 | 显示"运营仪表盘",包含:运营洞察、积分动态(今日发放/消费)、内容矩阵(已发布/草稿)、今日待办 | ☐ |
| 1.5 | 运营 AI 摘要 | 查看顶部 AI 摘要 | 显示 AI 生成的运营重点摘要 | ☐ |
| 1.6 | 快捷操作 | 查看按钮 | 显示:审核积分订单、发布新文章、推送活动提醒 | ☐ |
| 1.1 | 登录 | 输入 operator_test / Admin@2026 | 成功登录,左侧菜单 24 项 | ☐ |
| 1.2 | 运营仪表盘 | 查看首页 | 显示"运营仪表盘":运营洞察、积分动态(今日发放/消费)、内容矩阵(已发布/草稿)、今日待办 | ☐ |
| 1.3 | AI 摘要 | 查看顶部 AI 摘要 | 显示 AI 生成的运营重点摘要 | ☐ |
| 1.4 | 快捷操作 | 查看按钮 | 审核积分订单、发布新文章、推送活动提醒 | ☐ |
## 2. 患者管理
## 2. 场景 A — 患者与标签管理
| # | 测试项 | 路径 | 操作 | 预期结果 | 通过 |
|---|--------|------|------|----------|------|
| 2.1 | 患者列表(只读) | /health/patients | 打开列表 | 可查看患者列表(有 patient.list 权限,无 manage确认新增按钮是否隐藏 | ☐ |
| 2.2 | 标签管理 | /health/tags | 列表 → 新增 → 编辑 | 可管理标签(有 tags.manage 权限) | ☐ |
> **业务链**: 管理标签 → 查看患者(只读)
## 3. 积分运营
| # | 步骤 | 操作 | 预期结果 | 通过 |
|---|------|------|----------|------|
| A.1 | 标签管理 | /health/tags → 新增"术后康复"标签 → 编辑 → 保存 | 标签 CRUD 正常(有 tags.manage | ☐ |
| A.2 | 患者列表 | /health/patients → 查看列表 | 只读查看,确认新增按钮是否隐藏(有 patient.list 无 manage | ☐ |
| A.3 | 患者搜索 | 搜索框输入 → 标签筛选 | 搜索和筛选正常 | ☐ |
| # | 测试项 | 路径 | 操作 | 预期结果 | 通过 |
|---|--------|------|------|----------|------|
| 3.1 | 积分规则 | /health/points-rules | 打开列表 → 查看 | 显示积分规则列表,可管理规则 | ☐ |
| 3.2 | 商品管理 | /health/points-products | 打开列表 → 新增 | 可管理积分商品 | ☐ |
| 3.3 | 订单管理 | /health/points-orders | 打开列表 → 查看 | 显示兑换订单列表 | ☐ |
| 3.4 | 线下活动 | /health/offline-events | 打开列表 → 查看 | 显示线下活动列表 | ☐ |
**交接点**: 标签创建后,医护角色可在患者筛选中使用。
## 4. 内容运营
## 3. 场景 B — 内容发布链
| # | 测试项 | 路径 | 操作 | 预期结果 | 通过 |
|---|--------|------|------|----------|------|
| 4.1 | 内容管理 | /health/articles | 列表 → 新增 → 编辑 → 发布 | 可管理文章(有 articles.manage 和 articles.review 权限) | ☐ |
| 4.2 | 文章发布 | /health/articles | 编辑文章 → 点击发布 | 文章状态变为已发布 | ☐ |
> **业务链**: 创建文章 → 编辑 → 提交审核 → 发布 → 验证已发布
## 5. 设备 & 告警
| # | 步骤 | 操作 | 预期结果 | 通过 |
|---|------|------|----------|------|
| B.1 | 创建文章 | /health/articles → 新增 → 填写标题/内容 → 保存草稿 | 文章状态 draft | ☐ |
| B.2 | 编辑文章 | 点击草稿 → 修改内容 → 保存 | 内容更新 | ☐ |
| B.3 | 发布文章 | 点击发布 | 状态 draft → published有 articles.manage 和 articles.review | ☐ |
| B.4 | 内容矩阵 | 回到运营仪表盘 → 查看内容矩阵 | 已发布/草稿数量更新 | ☐ |
| # | 测试项 | 路径 | 操作 | 预期结果 | 通过 |
|---|--------|------|------|----------|------|
| 5.1 | 设备管理(只读) | /health/devices | 打开列表 | 可查看设备列表(只读,无 devices.manage | ☐ |
| 5.2 | 告警仪表盘 | /health/alert-dashboard | 打开页面 | 可查看告警统计(只有 alerts.list无 manage确认操作按钮 | ☐ |
**交接点**: 已发布文章患者端小程序可见。
## 6. AI 用量
## 4. 场景 C — 积分商城链
| # | 测试项 | 路径 | 操作 | 预期结果 | 通过 |
|---|--------|------|------|----------|------|
| 6.1 | AI 用量统计 | /health/ai-usage | 打开页面 | 可查看 AI 调用量(只读) | ☐ |
> **业务链**: 配置积分规则 → 上架商品 → 查看订单
## 7. 消息
| # | 步骤 | 操作 | 预期结果 | 通过 |
|---|------|------|----------|------|
| C.1 | 积分规则 | /health/points-rules → 查看 → 编辑规则 | 可管理积分规则 | ☐ |
| C.2 | 新增商品 | /health/points-products → 新增 → 填写名称/积分/库存 → 保存 | 商品出现在列表 | ☐ |
| C.3 | 订单管理 | /health/points-orders → 查看订单列表 | 显示兑换订单 | ☐ |
| C.4 | 积分动态 | 回到运营仪表盘 → 查看积分动态 | 今日发放/消费数据更新 | ☐ |
| # | 测试项 | 路径 | 操作 | 预期结果 | 通过 |
|---|--------|------|------|----------|------|
| 7.1 | 消息列表 | /messages | 打开消息中心 | 只读消息列表 | ☐ |
**交接点**: 商品上架后,患者端小程序积分商城可见可兑换。
## 8. 权限边界验证
## 5. 场景 D — 线下活动链
> **业务链**: 创建活动 → 查看报名 → 管理
| # | 步骤 | 操作 | 预期结果 | 通过 |
|---|------|------|----------|------|
| D.1 | 创建活动 | /health/offline-events → 新增 → 填写名称/时间/地点 → 保存 | 活动创建成功 | ☐ |
| D.2 | 查看活动 | 列表查看活动详情 | 显示报名人数、活动状态 | ☐ |
## 6. 场景 E — 设备与告警查看
> **业务链**: 查看设备状态 → 查看告警统计
| # | 步骤 | 操作 | 预期结果 | 通过 |
|---|------|------|----------|------|
| E.1 | 设备管理 | /health/devices → 查看列表 | 只读查看(无 devices.manage | ☐ |
| E.2 | 告警仪表盘 | /health/alert-dashboard → 查看 | 只读查看(只有 alerts.list确认操作按钮不可用 | ☐ |
## 7. 场景 F — AI 用量
> **业务链**: 查看 AI 调用统计
| # | 步骤 | 操作 | 预期结果 | 通过 |
|---|------|------|----------|------|
| F.1 | AI 用量 | /health/ai-usage → 查看 | 只读查看 AI 调用量 | ☐ |
## 8. 消息
| # | 测试项 | 操作 | 预期结果 | 通过 |
|---|--------|------|----------|------|
| 8.1 | 无用户管理 | 输入 /users | 403 | ☐ |
| 8.2 | 无医护管理 | 输入 /health/doctors | 403 | ☐ |
| 8.3 | 无随访管理 | 输入 /health/follow-up-tasks | 403 | ☐ |
| 8.4 | 无咨询管理 | 输入 /health/consultations | 403 | ☐ |
| 8.5 | 无诊断记录 | 输入 /health/diagnoses | 403 | ☐ |
| 8.6 | 无行动收件箱 | 输入 /health/action-inbox | 403 | ☐ |
| 8.7 | 无知情同意 | 输入 /health/consents | 403 | ☐ |
| 8.8 | 无 AI 分析 | 输入 /health/ai-analysis | 403 | ☐ |
| 8.9 | 无系统设置 | 输入 /settings | 403 | ☐ |
| 8.1 | 消息列表 | /messages → 查看 | 只读消息列表 | ☐ |
## 9. 小程序端
## 9. 权限边界验证
> operator 不应访问的模块
| # | 测试项 | 操作 | 预期结果 | 通过 |
|---|--------|------|----------|------|
| 9.1 | 登录跳转 | operator 角色登录 | 跳转到患者首页isMedicalStaff=false因为 operator 不在医护列表中) | ☐ |
| 9.2 | 患者首页 | 查看首页 | 显示体征完成度、今日待办、快捷操作(普通患者视图) | ☐ |
| 9.1 | 无用户管理 | 地址栏输入 /users | 403 | ☐ |
| 9.2 | 无医护管理 | 地址栏输入 /health/doctors | 403 | ☐ |
| 9.3 | 无随访管理 | 地址栏输入 /health/follow-up-tasks | 403 | ☐ |
| 9.4 | 无咨询管理 | 地址栏输入 /health/consultations | 403 | ☐ |
| 9.5 | 无诊断记录 | 地址栏输入 /health/diagnoses | 403 | ☐ |
| 9.6 | 无行动收件箱 | 地址栏输入 /health/action-inbox | 403 | ☐ |
| 9.7 | 无知情同意 | 地址栏输入 /health/consents | 403 | ☐ |
| 9.8 | 无 AI 分析 | 地址栏输入 /health/ai-analysis | 403 | ☐ |
| 9.9 | 无系统设置 | 地址栏输入 /settings | 403 | ☐ |
## 10. 跨角色协作验证
| # | 协作场景 | 操作 | 预期结果 | 通过 |
|---|----------|------|----------|------|
| X.1 | 标签共享 | 新建标签 → 用 doctor 账号验证 | doctor 可在患者筛选中使用新标签 | ☐ |
| X.2 | 内容发布同步 | 发布文章 → 验证患者端可见 | 小程序患者端可见已发布内容 | ☐ |
| X.3 | 积分订单联动 | 患者兑换商品 → 查看订单 | 订单出现在积分订单列表 | ☐ |
## 11. 小程序端(患者视角)
> operator 不在医护列表中,以普通患者身份使用小程序
| # | 测试项 | 操作 | 预期结果 | 通过 |
|---|--------|------|----------|------|
| 11.1 | 登录跳转 | operator_test 登录小程序 | 跳转到患者首页isMedicalStaff=false | ☐ |
| 11.2 | 患者首页 | 查看首页 | 显示体征完成度、今日待办、快捷操作(普通患者视图) | ☐ |
## 测试结果