Permission Management System 权限系统设计概要
1. 系统设计概览
- RBAC 系统
- 基于角色控制,更规范
- 注册内容:用户,角色,功能权限(服务/实体 + 操作)
- ABAC 系统
- 基于属性控制,更灵活
- 注册内容:用户,操作属性,规则
2. Rules 设计原则
2.1 RBAC 系统(角色视角)
- 默认角色:超级管理员、租户/项目管理员、普通用户(非管理员性质)
- 管理员:平台/租户/项目内的最大权限,包含所有服务模块、全部资源范围
- 普通用户:平台/租户/项目内的查看权限(非敏感操作),包含所有服务模块、全部资源范围
- 自定义角色(非管理员)
- 由自定义策略集合定义其可操作的服务模块、资源范围
- 标签说明
- 用户:超级管理员(is superuser)、管理员(is admin)
- 角色:系统默认性质(is fixed)、管理性质(is admin)、非管理性质(is member)
- 注:以上标签属于敏感信息,默认不允许在任何 API 接口中传输;如特殊情况下必须传输,不以明文形式传输。
2.2 权限控制
数据权限:ABAC 系统
- 防止水平越权:相同权限的不同租户/项目内用户,无法越权访问、创建、删除、设置其他租户/项目内的角色。
功能权限:RBAC 系统
- 防止垂直越权:不同权限的相同租户/项目内用户,无法通过除关联级别外的涉及其他权限的鉴权。
2.3 应用场景示例:工单系统
- 仅功能权限
- RBAC 设计:超级管理员、租户/项目管理员、普通用户、自定义角色
平台/租户/项目 | 用户 | 角色 | 操作 | 内容 |
---|---|---|---|---|
平台 | 超级管理员 | 超级管理员 | 查看、管理工单 | 查看、管理全体租户/项目内的全体工单 |
平台 | 用户j | 普通用户 | 查看工单 | 查看全体租户/项目内的全体工单 |
平台 | 用户k | 自定义角色 | 查看、管理工单 | 查看、自定义操作全体租户/项目内的全体工单 |
租户/项目A | 管理员 | 租户/项目管理员 | 查看、管理工单 | 查看、管理租户/项目 A 内的全体工单 |
租户/项目A | 用户m | 普通用户 | 查看工单 | 查看租户/项目 A 内的全体工单 |
租户/项目A | 用户n | 自定义角色 | 查看、管理工单 | 查看、自定义操作租户/项目 A 内的全体工单 |
- 功能权限 + 数据权限
- RBAC 设计:超级管理员、租户/项目管理员、普通用户、自定义角色
- ABAC 设计:租户/项目、用户、自定义实体属性
平台/租户/项目 | 用户 | 角色 | 操作 | 内容 |
---|---|---|---|---|
平台 | 超级管理员 | 超级管理员 | 查看、管理工单 | 查看、管理全体租户/项目内的全体工单 |
平台 | 用户a | 普通用户 | 查看工单 | 查看用户a名下的全体工单 |
平台 | 用户b | 自定义角色 | 查看、管理工单 | 查看、自定义操作用户b名下的全体工单 |
租户/项目A | 管理员 | 租户/项目管理员 | 查看、管理工单 | 查看、管理租户/项目 A 内的全体工单 |
租户/项目A | 用户m | 普通用户 | 查看工单 | 查看租户/项目 A 内、用户m名下的全体工单 |
租户/项目A | 用户n | 自定义角色 | 查看、管理工单 | 查看、自定义操作租户/项目 A 内、用户n名下的全体工单 |