菜鸟CK 2016-07-20 21:48:00 14393次浏览 8条评论 16 4 0

一、写在前面

RBAC,即基于角色的访问控制(Role-Based Access Control)

RBAC 支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则。

Yii2RBAC核心文件在@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\PhpManageryii\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'
],

具体位置:

rbacconfig.png

四、操作

新建RbacController.php控制器。

没有草稿功能,待续......

觉得很赞
您需要登录后才可以评论。登录 | 立即注册