需求来源:prompts.md(用户管理模块增加角色管理) 状态:已确认(2026-08-20)
在用户管理模块中新增角色管理:
AllowedAction 对齐)| 决策点 | 结论 |
|---|---|
| ADMIN 与自定义角色关系 | 保留内置超管:role_code(ADMIN/USER)不变,ADMIN 恒为超管(绕过矩阵,密级限制仍适用);自定义角色仅挂 USER 体系 |
| 矩阵与文档 ACL 关系 | OR 叠加;后续 ACL 迁移为限时借阅权限(本次不实现) |
| 部门三分类判定 | 本部门 = 文档归属机构是用户机构或其下级(org_path 前缀);已配置部门 = 文档归属机构 ∈ 角色可访问部门列表;其余 = 其他部门 |
| 表 | 结构 |
|---|---|
sys_role |
id、role_name、sort_no、status(ENABLED/DISABLED)、remark、is_default、default_marker(计算列:is_default=1→1 否则 NULL)+ 唯一约束保证全局至多一个默认角色(复用 active_marker 模式)+ BusinessTableMixin |
sys_role_dept |
role_id → sys_role、organization_id → sys_organization,唯一约束 (role_id, organization_id, active_marker) + BusinessTableMixin |
sys_role_permission |
role_id、security_level、dept_scope(OWN/ASSIGNED/OTHER)、can_view / can_download / can_edit / can_delete / can_config_permission / can_bind_attachment / can_unbind_attachment(布尔列,每角色固定 15 行)+ 唯一约束 (role_id, security_level, dept_scope, active_marker) + BusinessTableMixin |
sys_user |
新增 role_id FK → sys_role 可空(NULL → 默认角色) |
evaluate_plan_access / plan_allowed_actions 新增矩阵判定:
(security_level, dept_scope) 行 → 与 ACL 结果 OR 叠加| 接口 | 说明 | |
|---|---|---|
| GET /roles(分页+keyword+status) | 角色列表(含成员数、isDefault) | |
| POST /roles | 新建(roleName/sortNo/status/remark/isDefault) | |
| PUT /roles/ | 编辑(rowVersion 乐观锁) | |
| DELETE /roles/?rowVersion= | 删除(有关联用户时拒绝,ROLE_IN_USE) | |
| GET /roles//departments | 可访问部门 id 列表 | |
| PUT /roles//departments | 整存部门列表(rowVersion) | |
| GET /roles//permissions | 15×7 矩阵 | |
| PUT /roles//permissions | 矩阵整存整取(rowVersion) | |
| PUT /roles//users | 关联用户集合(rowVersion) | |
| GET /users 扩展 | User DTO 增加 roleId/roleName |
| 阶段 | 内容 | 验证 |
|---|---|---|
| 1 | 数据模型 + 迁移 0012 | test_migration.py |
| 2 | 角色 CRUD/部门/矩阵/用户关联 API + 审计 + OpenAPI | 新增 pytest |
| 3 | authorization_service 矩阵判定融合 | 判定单测 + 既有 90 测试守底 |
| 4 | 前端角色 Tab + 矩阵 + 用户角色下拉 | tsc + vitest |
| 5 | 全量回归 | 前后端全量测试 |