RBAC 模型标准层次:基础 RBAC0、角色分级 RBAC1、角色约束 RBAC2、统一 RBAC3
RBAC 模型并非单一规范,而是由四个渐进层次构成的标准体系。明确每一层的边界、组件职责与适用范围,是设计多租户权限系统的第一步。四层模型并非互相替代,而是逐层叠加约束与能力:高层兼容低层,低层可作为独立方案落地。
核心原则:选型时优先确定业务需要的“约束粒度”——是否需要角色继承、互斥、基数控制,再决定采用 RBAC1/2/3,而非直接上最高层。
四层模型概览
| 层次 | 全称 | 核心特征 | 典型场景 | 复杂度 |
|---|---|---|---|---|
| RBAC0 | 基础 RBAC | 用户 ⇄ 角色 ⇄ 权限,无继承、无约束 | 小型 SAAS、单租户系统 | 低 |
| RBAC1 | 角色分级 | 角色继承(上级角色自动拥有下级权限) | 企业级分层组织、运维权限层级 | 中 |
| RBAC2 | 角色约束 | 互斥角色、基数限制、先决条件角色 | 金融/合规系统、多人审批流程 | 中高 |
| RBAC3 | 统一 RBAC | RBAC1 + RBAC2 全量能力 | 多租户复杂权限、大型企业平台 | 高 |
分层详解与组件职责
RBAC0 —— 地基
用户、角色、权限三者关系为简单的多对多映射。不涉及角色间关系。组件职责清晰:
- 权限管理模块:维护操作(增删改查)与资源(数据集、URL)的绑定关系。
- 角色管理模块:创建/删除角色,为用户分配角色。
- 会话管理模块:用户在登录后激活其关联角色,获得相应权限。
数据流:用户登录 → 加载角色列表 → 加载角色对应权限 → 缓存至会话。控制流仅受角色分配表驱动,无后退逻辑。
RBAC1 —— 继承层次
角色可形成偏序关系(角色树),上级角色自动拥有下级角色的所有权限。组件新增:
- 角色继承解析器:在授权时递归合并上级与下级权限集。
- 循环检测器:禁止角色继承形成环。
信任链路:若租户管理员创建“超级管理员”角色继承“子管理员”,则子管理员权限变更会向上传播。风险在于继承深度过大可能导致权限爆炸。
RBAC2 —— 约束引擎
在 RBAC0 基础上引入三类约束规则,由约束校验器组件统一执行:
| 约束类型 | 定义 | 示例 |
|---|---|---|
| 互斥角色 | 一个用户不能同时拥有两个互斥角色 | 出纳角色 mutex 会计角色 |
| 基数约束 | 角色同时可被分配的用户数上限 | “超级管理员”仅允许 3 人 |
| 先决条件 | 分配角色 B 前必须已拥有角色 A | 必须先有“普通用户”才能分配“高级用户” |
约束校验发生在角色分配、会话建立两个时刻,防止违反规则的状态被执行。
RBAC3 —— 全能力体
将 RBAC1 的继承树与 RBAC2 的约束引擎合并运行。组件需要处理继承与约束的冲突:例如父角色被分配互斥角色时,子角色是否继承?标准推荐约束优先:继承不得绕过互斥约束。数据流需在权限合并后执行约束重检。
选型权衡
- RBAC0:适合快速上线、角色数量少、无复杂约束的团队。注意后续升级到 RBAC1/2 时的数据迁移成本。
- RBAC1:适合组织架构清晰的企业。风险在于角色继承深度超过 4 层后,权限推导性能下降,建议限制最大继承深度。
- RBAC2:适合合规要求严格的场景。互斥约束的维护成本高,且修改约束时可能影响已有分配记录,需提供“约束变更影响报告”。
- RBAC3:全量功能引入后,权限引擎的复杂性是指数级增长的。建议仅在跨租户权限共享、多级代理场景中使用,且必须配套可视化权限图谱。
风险点:
1. RBAC1 中若允许角色多继承,可能导致下层角色权限来源不明确,引发权限泄漏。
2. RBAC2 的基数约束若未在删除用户时自动释放,会导致无法分配新用户(死锁)。
3. RBAC3 中继承与约束冲突时,若未制定明确优先级(如约束强制覆盖继承),将产生不可预期的授权结果。
1. RBAC1 中若允许角色多继承,可能导致下层角色权限来源不明确,引发权限泄漏。
2. RBAC2 的基数约束若未在删除用户时自动释放,会导致无法分配新用户(死锁)。
3. RBAC3 中继承与约束冲突时,若未制定明确优先级(如约束强制覆盖继承),将产生不可预期的授权结果。
落地步骤(以多租户系统为例)
- 定义基线:先按 RBAC0 搭建用户-角色-权限三元组,通过数据表隔离租户 ID。
- 审计角色数量:若超过 30 个角色且存在上下级关系,引入 RBAC1 角色继承。
- 分析互斥场景:梳理业务流程中不可兼任的岗位(如审核员与提交者),引入 RBAC2 互斥约束。
- 配置基数规则:对敏感角色设置最大分配人数,并实现自动回退机制。
- 升级到 RBAC3:在已有继承和约束基础上,统一规则引擎,实现所有约束的联合校验。
- 性能优化:对权限合并结果进行缓存预热,避免每次请求递归遍历角色树。
验收标准
| 验收项 | 预期结果 | 校验方法 |
|---|---|---|
| RBAC0 基础映射 | 用户分配角色后立即获得对应权限 | 新建用户并分配角色,调用受保护 API 验证 |
| RBAC1 继承生效 | 子角色权限变更后,父角色权限同步变化 | 修改子角色权限,检查父角色用户的访问能力 |
| RBAC2 互斥拦截 | 分配互斥角色时报错,会话建立前检测 | 尝试将同一用户分配至互斥角色对,确认拒绝 |
| RBAC3 冲突处理 | 继承得到的权限若违反互斥约束,自动剔除 | 构造继承链路中涉及互斥角色的场景,验证最终权限集不含互斥项 |