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 的约束引擎合并运行。组件需要处理继承与约束的冲突:例如父角色被分配互斥角色时,子角色是否继承?标准推荐约束优先:继承不得绕过互斥约束。数据流需在权限合并后执行约束重检。

RBAC 四层标准体系结构 RBAC0 用户-角色-权限 无继承、无约束 RBAC1 角色继承 权限叠加 RBAC2 互斥/基数/先决 约束引擎 RBAC3 继承+约束 全量能力 选择原则 从RBAC0起步 按需叠加

选型权衡

  • RBAC0:适合快速上线、角色数量少、无复杂约束的团队。注意后续升级到 RBAC1/2 时的数据迁移成本。
  • RBAC1:适合组织架构清晰的企业。风险在于角色继承深度超过 4 层后,权限推导性能下降,建议限制最大继承深度。
  • RBAC2:适合合规要求严格的场景。互斥约束的维护成本高,且修改约束时可能影响已有分配记录,需提供“约束变更影响报告”。
  • RBAC3:全量功能引入后,权限引擎的复杂性是指数级增长的。建议仅在跨租户权限共享、多级代理场景中使用,且必须配套可视化权限图谱。
风险点:
1. RBAC1 中若允许角色多继承,可能导致下层角色权限来源不明确,引发权限泄漏。
2. RBAC2 的基数约束若未在删除用户时自动释放,会导致无法分配新用户(死锁)。
3. RBAC3 中继承与约束冲突时,若未制定明确优先级(如约束强制覆盖继承),将产生不可预期的授权结果。

落地步骤(以多租户系统为例)

  1. 定义基线:先按 RBAC0 搭建用户-角色-权限三元组,通过数据表隔离租户 ID。
  2. 审计角色数量:若超过 30 个角色且存在上下级关系,引入 RBAC1 角色继承。
  3. 分析互斥场景:梳理业务流程中不可兼任的岗位(如审核员与提交者),引入 RBAC2 互斥约束。
  4. 配置基数规则:对敏感角色设置最大分配人数,并实现自动回退机制。
  5. 升级到 RBAC3:在已有继承和约束基础上,统一规则引擎,实现所有约束的联合校验。
  6. 性能优化:对权限合并结果进行缓存预热,避免每次请求递归遍历角色树。

验收标准

验收项 预期结果 校验方法
RBAC0 基础映射 用户分配角色后立即获得对应权限 新建用户并分配角色,调用受保护 API 验证
RBAC1 继承生效 子角色权限变更后,父角色权限同步变化 修改子角色权限,检查父角色用户的访问能力
RBAC2 互斥拦截 分配互斥角色时报错,会话建立前检测 尝试将同一用户分配至互斥角色对,确认拒绝
RBAC3 冲突处理 继承得到的权限若违反互斥约束,自动剔除 构造继承链路中涉及互斥角色的场景,验证最终权限集不含互斥项