RBAC
RBAC 权限模型介绍
RBAC(Role-based access control,基于角色的访问控制)是一种以角色为基础的访问控制,它是一种较新且广为使用的权限控制机制,这种机制不是直接给用户赋予权限,而是将权限赋角色。
RBAC 权限模型将用户按角色进行归类,通过用户的角色来确定用户对某项资源是否具备操作权限。RBAC 简化了用户与权限的管理,它将用户与角色关关、角色与权限关联、权限与资源关联,这种模式使得用户的授权管理变得非常简单和易于维护。
RBAC 权限模型有三原则:
-
最小权限:给角色配置的权限是其完成任务所需要的最小权限集合。
-
职责分离:通过相互独立互斥的角色来共同完成任务。
-
数据抽象:通过权限的抽象来体现,RBAC 支持的数据抽象程度与 RBAC 的实现细节有关。
RBAC 的应用非常广泛,除了常规的企业级应用,RBAC 也广泛应用在医疗、国防等领域。
关于 RBAC 的更多介绍,读者可以参考这个文档: https://csrc.nist.gov/projects/Role-Based-Access-Control 。
RBAC 权限模型分类
RBAC 权限模型有四种不同的分类,我们分别来看一下。
RBACO
RBACO 是最简单的用户、角色、权限模型,也是 RBAC 权限模型中最核心的一部分,后面其他模型都是在此基础上建立的。在 RBACO 中,一个用户可以具备多个角色,一个角色可以具备多个权限,最终用户所具备的权限是用户所具备的角色的权限并集,如图 14-8 所示,

RBAC1
RBAC1 则是在 RABCO 的基础上引入了角色继承,让角色有了上下级关系,如图14-9所 示。

角色继承实际上也非常容易,在本书第 13.3.2 小节中,我们已经介绍过角色继承的实现方式,这里不再赘述。
RBAC2
RBAC2 也是在 RBACO 的基础上进行扩展,引入了静态职责分离和动态职责分离。要理解职责分离,得先理解角色互斥。在实际项目中,有一些角色是互斥的、对立的,例如,财务这个角色一般是不能和其他角色兼任的,否则自已报账自已审批。通过职责分离可以解决这一问题,职责分离有两种,静态职责分离和动态职责分离:
-
静态职责分离(Static Separation of Duty,SSD):在权限配置阶段就做限制。比如,同一用户不能授予互斥的角色,用户只能有有限个角色,用户获得高级权限之前要有低级权限等。
-
动态职责分离(Dynamic Separation of Duty,DSD):在运行阶段进行限制。比如,运行时同一用户下 5 个角色中只能同时有 2 个角色激活等。
RBAC2 权限模型如图14-10所示。
