认证中心
← 全部文档与搜索
独立页面 ↗下载 Markdown
本文目录 · 2 节

角色工作台与数据范围

工作台基于已授予的权限生成,支持自建角色。多个角色的权限合并生效;切换「个人工作台 / 管理后台」切换工作空间,不切换或伪造身份。

  • 普通用户默认进入个人总览,查看自己的授权、订单、积分、工单和消息。
  • 拥有后台功能权限的用户默认进入管理总览,只显示有权操作的入口与对应业务指标。地址显式指定个人页面时保留该目标。
  • 侧栏显示实际角色名称。页面聚焦时重新获取角色权限;无权访问的地址显示拒绝访问,不挂载业务组件、不发起其数据请求。
  • 管理工单列表、详情和首页数量均按「直接分配本人、分配所属角色、管理员」范围校验。直接分配与角色分配按并集计算。
  • 工单只读角色可查看范围内会话,但不能回复、改变状态或转派。转派接口也校验原工单范围。
  • 订单只读角色不显示交付、银行到账操作;用户管理仅请求有权读取的角色列表。
  • 管理业务与个人业务分开加载,切换页面清除上一个页面的数据和弹窗。

权限和数据约定

权限管理首页指标数据范围
users:read平台用户平台全部用户
orders:read待交付订单平台全部订单
orders:write待审核退款平台全部退款
authorizations:write有效软件授权平台全部授权
products:write商品数量平台全部商品
invoices:write待处理发票平台全部发票
portal:write公告草稿平台内容
tickets:read待处理工单本人或角色分配范围,管理员全部

后台总览接口 /admin/overview 逐项检查权限后才执行查询,无对应权限的字段不返回。仅拥有配置类权限的角色显示工作入口,不展示无权读取的业务数字。原有 stats:read 仍表示平台级运营统计权限,请只分配给需要查看全平台统计的人员。

用户资料接口 /user/profile 增加 roles: [{id, name}]。工作流选择器使用专用的最小字段接口:

  • /admin/ticket-options:需要 tickets:write,返回可处理工单人员的 ID、昵称,以及处理角色的 ID、名称。
  • /admin/authorization-options:需要 authorizations:write,返回授权商品及接收用户的选择字段。
  • /admin/product-options:需要 products:write,仅返回启用应用的 ID 和名称。

这些接口不授予用户管理、角色权限编辑或应用密钥访问权限。当前产品没有租户、部门隔离模型,除工单分配范围和个人数据外,管理权限对应平台范围。

验证

  • cd web; npm run typecheck
  • 在 Go 1.26 环境运行 go test ./... 和 go vet ./...。
  • node scripts/role-workspace-ui-check.cjs:本地 3000 前端,以 API fixtures 验证普通、只读及多角色首页、工作空间切换、无权限直链、管理工单请求和移动端宽度。需 Playwright 与 Edge。
  • python scripts/role_workspace_tests.py:设置 TEST_API_URL 为独立测试服务 18081 或 18082,使用 compose.test.yaml 的数据库和本地 Mailpit;创建独立测试账号、角色、工单,验证只读/写入边界、直接与角色分配、多角色合并与撤权。测试不清空已有数据库。

Docker 恢复后的复测结果

2026-09-09 使用当前源码重新构建测试镜像,go test ./...、go vet ./...、前端类型检查均通过。浏览器回归的普通用户、工单只读、多角色三种身份均通过。独立测试 API 18081 的四项后端回归全部通过,包括此前受磁盘故障阻塞的多角色权限合并与撤权:撤权后,原会话的管理总览不再返回业务指标,原可访问工单立即返回 403。此前的验证阻塞已解除。