百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> Yii授权之基于角色的存取控制 (RBAC)
分享文章到:

Yii授权之基于角色的存取控制 (RBAC)

发布时间:09/01 来源:未知 浏览: 关键词:

一:根本概念

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

可以用一个规则 rule 与一个角色或者权限关联。一个规则用一段代码代表, 规则的施行是在检查一个会员可否知足这个角色或者权限时停止的。例如,"改帖" 的权限 可以使用一个检查该会员可否是帖子的创立者的规则。权限检查中,假如该会员 不是帖子创立者,那么他(她)将被认为不具有 "改帖"的权限。

角色和权限都可以按层次组织。特定状况下,一个角色大概由其他角色或权限构成, 而权限又由其他的权限构成。Yii 实现了所谓的 部分次序 的层次构造,包括更多的特定的 树 的层次。 一个角色可以包括一个权限,反之则不可。(译者注:可懂得为角色在上方,权限鄙人方,从上到下假如碰到权限那么再往下不克不及显现角色)

二:配置 RBAC

在开端定义授权数据和施行存取检查此前,需要先配置利用组件 yiibaseApplication::authManager 。 Yii 供给了两套授权治理器: yiirbacPhpManager 和 yiirbacDbManager。前者使用 PHP 足本存置授权数据, 而后者使用数据库存置授权数据。 假如你的利用不要求大量的动态角色和权限治理, 你可以思考使用前者

1:使用yiirbacPhpManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\PhpManager',
        ],        // ...
    ],
];

配置完成之后你就可以通过Yii::$app->authManager来拜访 authManager

yiirbacPhpManager 默许将 RBAC 数据留存在 @app/rbac 名目下的文件中。 假如权限层次数据在运转时会被修改,需确保WEB效劳器进程对该名目和其中的文件有写权限。

2:使用yiirbacDbManager

(1)配置yiirbacDbManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\DbManager',            // uncomment if you want to cache RBAC items hierarchy
            // 'cache' => 'cache',
        ],        // ...
    ],
];

这里留意:

假如你使用的是Yii的根基模板的话,上面的配置你需要在config/console.php和config/web.php文件中都停止配置,假如你是Yii的高级模板的话,只需要在common/config/main.php文件中配置一次就可以了

(2)生成所需要的权限表

使用yiirbacDbManager的话,需要生成4个数据库表存置权限数据(他们都有默许表名,假如你需要修改表名的话,在配置yiirbacDbManager时停止修改)

itemTable: 该表存置授权条目(译者注:即角色和权限)。默许表名为 "auth_item" 。
itemChildTable: 该表存置授权条目的层次关系。默许表名为 "auth_item_child"。
assignmentTable: 该表存置授权条目对会员的指派状况。默许表名为 "auth_assignment"。
ruleTable: 该表存置规则。默许表名为 "auth_rule"。

在项目名目施行

yii migrate --migrationPath=@yii/rbac/migrations

施行上面的命令后,这时候在我们的数据库中就会生成上述所说的四个表了

409535279-5d1723803767d_articlex.png

假如你不细化使用命令生成数据库的话,你可以将vendoryiisoftyii2rbacmigrationsschema-mysql.sql 的内容拷贝里面到数据库运转生成数据表

生成对应的权限表之后,这时候我们就可以使用Yii::$app->authManager来拜访 authManager

三:创立授权数据

1:增加(创立)权限(在auth_item表中生成权限数据,type为2表示权限)

$auth = Yii::$app->authManager;// 增加 "createPost" 权限$createPost = $auth->createPermission('createPost');
$createPost->description = '创立了createPost权限';
$auth->add($createPost);

2:创立角色(在auth_item表中生成角色数据,type为1表示角色)

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');
$role->description = '创立了author角色';
$auth->add($role);

3:给角色给予权限

(1)给角色给予指定权限

$auth = Yii::$app->authManager;
$createPost = $auth->createPermission('createPost');//创立权限对象
$role = $auth->createRole('author');//创立角色对象
$auth->addChild($role, $createPost); //增加对应关系(给author角色增加createPost权限)

(2)给角色给予指定角色的所有权限

$auth = Yii::$app->authManager;
$role1 = $auth->createRole('author1');//创立角色对象
$role2 = $auth->createRole('author2');//创立权限对象
$auth->addChild($role1, $role2); //增加对应关系(给author1角色增加author2角色所有权限)

4:给会员分配角色

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');//创立角色对象$auth->assign($role, 1); #1是IdentityInterface::getId()返回的id,及会员表的id

四:验证权限

\Yii::$app->user->can($action) #$action表示权限\Yii::$app->user->can('createPost') #推断会员可否具有createPost权限

猎取会员所属角色

$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($userId);

猎取会员所属权限

$auth = Yii::$app->authManager;
$roles = $auth->getPermissionsByUser($userId);

上面就是基于角色的存取操纵 (RBAC)简便理解,具体可参照 Yii的官方文档

以上就是Yii授权之基于角色的存取操纵 (RBAC)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板