一、写在前面
RBAC,即基于角色的访问控制(Role-Based Access Control)。
RBAC 支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则。
Yii2的RBAC核心文件在@vendor\yiisoft\yii2\rbac目录下,数据表的创建信息在该目录的migrations` 目录下。
许可(Permission):包括许可标识、许可名称、受控对象、操作标识等。给出了受控对象与操作算子的对应关系。
角色(Role):包括角色标识、角色名称、角色基数、角色可用标识等。是系统角色集,由系统管理员定义角色。
用户(User):包括用户标识、用户姓名、用户登录密码等。是系统中的个体用户集,随用户的添加与删除动态变化。
规则(Rule):与一个角色或者权限关联。一个规则用一段代码代表, 规则的执行是在检查一个用户是否满足这个角色或者权限时进行的。
举个稍微形象点的例子:
对于【编辑】这一个角色,
我们可以给它分配不同的【许可权限】,比如删文章、发文章等。
【许可权限】删文章、发文章分别对应了不同的【规则】,
假设有【用户】editor这个账号,这个账号属于【编辑】这一个角色,它就拥有了删文章、发文章的权限了。
角色和权限都可以按层次组织。特定情况下,一个角色可能由其他角色或权限构成, 而权限又由其他的权限构成。
二、权限数据表
@vendor\yiisoft\yii2\rbac\migrations\schema-mysql.sql 文件中有四张表:
auth_rule:单独存放Rule,跟auth_item中的rule_name字段对应
auth_item:存放Role和Permission,以type字段区别,1为Role,2为Permission
auth_item_child:Role拥有的Permission,一个Role可以有多个Permission
auth_assignment:用户拥有的Role,一个用户可以有多个Role
三、配置RBAC
Yii 提供了两套授权管理器: yii\rbac\PhpManager 和 yii\rbac\DbManager。
yii\rbac\PhpManager使用 PHP 脚本存放授权数据, yii\rbac\DbManager使用数据库存放授权数据。
如果你的应用不要求大量的动态角色和权限管理, 可以考虑使用yii\rbac\PhpManager。
我们将 @vendor\yiisoft\yii2\rbac\migrations\schema-mysql.sql 文件导入之前一直使用的库 yii2basic,或者在 yii2basic 库中通过可视化管理工具、手动等方式创建改文件中的数据表。
配置@config/web.php
'authManager' => [
'class' => 'yii\rbac\DbManager'
],
具体位置:
四、操作
新建RbacController.php控制器。
没有草稿功能,待续......