基于角色的存取控制 (RBAC)

基于角色的存取控制 (RBAC) 提供了一个简单而强大的集中式存取控制机制。 详细的关于 RBAC 和诸多传统的存取控制方案对比的详情,请参阅 Wikipedia

Yii 实现了通用的分层的 RBAC,遵循的模型是 NIST RBAC model. 它通过 yii\rbac\ManagerInterface application component 提供 RBAC 功能。

使用 RBAC 涉及到两部分工作。第一部分是建立授权数据, 而第二部分是使用这些授权数据在需要的地方执行检查。

为方便后面的讲述,这里先介绍一些 RBAC 的基本概念。

基本概念

角色是 权限 的集合 (例如:建贴、改贴)。一个角色 可以指派给一个或者多个用户。要检查某用户是否有一个特定的权限, 系统会检查该包含该权限的角色是否指派给了该用户。

可以用一个规则 rule 与一个角色或者权限关联。一个规则用一段代码代表, 规则的执行是在检查一个用户是否满足这个角色或者权限时进行的。

举个栗子:"改贴" 的权限,可以使用一个检查该用户是否是帖子的创建者的rule规则。权限检查中,先检测是否拥有“改贴”的权限,然后检测rule规则,即如果该用户不是帖子的创建者,那么他(她)将被认为不具有 "改贴"的权限。

角色和权限都可以按层次组织。特定情况下,一个角色可能由其他角色或权限构成, 而权限又由其他的权限构成。Yii 实现了所谓的 局部顺序 的层次结构,包含更多的特定的  的层次。 一个角色可以包含一个权限,反之则不行。(译者注:可理解为角色在上方,权限在下方,从上到下如果碰到权限那么再往下不能出现角色)

rbac.png

即:

角色 包含 角色

角色 包含 权限

权限 包含 权限

但 :

权限 不可包含 角色