docs(arch): 同步UserRole/角色作用域数据模型描述(关联表为准)

UserRole遗留字段(DeptUUID/WorkgroupUUID/RoleType)已删除,部门/工作组归属与成员类型全走关联表
This commit is contained in:
TermiNexus committed 2026-08-28 15:34:36 +08:00
1 parent 058fd11fb0
commit 966ef66b08
1 file changed
+14 -11
+14 -11
View File
@@ -104,7 +104,7 @@
| **用户** | `User` / `UserAvatar` / `User2FA` / `UserPending2FA` / `UserLoginLog` / `AccountActivation` / `Password` / `UserIDCard` | 用户身份与认证 |
| **角色权限** | `Role` / `Permission` / `UserRole` / `RolePermission` | RBAC 核心 |
| **岗位模板** | `PositionTemplate` / `PositionTemplatePermission` | 权限初始化快照 |
| **人事标签** | `Position` / `UserDept` | 职务标签(与权限解耦) |
| **人事标签** | `Position` | 职务标签(与权限解耦) |
| **商铺** | `Shop` / `RoleShop` | 多商铺体系 |
| **ABAC** | `UserABAC` | 属性访问控制(补充) |
| **审计** | `AuditLog` / `AbnormalUserLog` | 操作审计 + 攻击溯源 |
@@ -113,7 +113,7 @@
#### (1) Position 与权限**完全解耦**
- 人事职务标签(`Position`)仅用于人事管理,**不直接绑定权限**
- 调岗/升职只修改 `UserDept.PositionUUID` 与 `UserRole`,权限只通过 `UserRole → RolePermission → Permission` 走
- 调岗/升职只修改 `Position`,权限只通过 `UserRole → RolePermission → Permission` 走
- 规避了业界常见错误:把职务直接绑权限导致调岗时权限树重算
#### (2) PositionTemplate 的"快照复制"机制
@@ -121,22 +121,25 @@
- 模板调整只影响**之后新建**的角色,已有角色不被动变更
- 避免了"模板改一个字段,全员权限突然变了"的运维灾难
#### (3) UserRole 作为**胖关联表**
`UserRole` 表同时承载三重语义:
- **权限分配**:User ↔ Role 多对多
- **组织归属**:携带 `CompanyUUID / DeptUUID / WorkgroupUUID`
- **数据范围**:`RoleType` 标识"普通成员/部门负责人"
#### (3) UserRole 实体化 + 关联表(部门/工作组多对多)
`UserRole` 是"用户↔角色"的**实体化中间表**(联合唯一:同一用户+同一角色仅一行):
- **权限分配**:User ↔ Role 多对多(`UserRoleUUID` 作为全局唯一关联实体)
- **组织归属**:不再放 UserRole 上,改走关联表(多对多):
- `UserRoleDepartment`:(用户-角色对) ↔ 部门(`UserRoleUUID + DeptUUID`)
- `UserRoleWorkgroup`:(用户-角色对) ↔ 工作组(`UserRoleUUID + WorkgroupUUID`)
- **成员类型**:`RoleType`(0=成员 / 1=负责人/组长)冗余在关联表,**按部门/工作组区分**
**优势**:同一用户在不同公司/部门可绑不同角色,原生支持 SAAS 强需求
**代价**:UserRole 违反单一职责,未来扩展需谨慎
**优势**:一个用户-角色对可同时挂多个部门/工作组,且在不同部门可分别标注成员/负责人
**注意**:UserRole 上的遗留字段(`DeptUUID / WorkgroupUUID / RoleType`)已废弃删除(见 gvsdsdk 0002 迁移),
全部语义以关联表为准。
#### (4) 角色作用域四档数据权限(`RoleScope`)
| 类型 | 判定条件 | 可见范围 |
|---|---|---|
| `admin` | IsSuperuser/IsStaff 或 `admin:super` 权限 | 全公司 |
| `dept_manager` | `UserRole.RoleType=1` 且 `DeptUUID` 非空 | 本部门成员 |
| `workgroup_lead` | `UserRole.RoleType=1` 且 `WorkgroupUUID` 非空 | 本工作组成员 |
| `dept_manager` | `UserRoleDepartment.RoleType=1`(按当前公司过滤,可多部门) | 本部门成员 |
| `workgroup_lead` | `UserRoleWorkgroup.RoleType=1`(按当前公司过滤,可多工作组) | 本工作组成员 |
| `member` | 其他 | 仅自己 |
### 4.4 运行时鉴权流程