摘要:一基本概念角色是权限的集合例如建贴改贴。特定情况下,一个角色可能由其他角色或权限构成,而权限又由其他的权限构成。提供了两套授权管理器和。前者使用脚本存放授权数据,而后者使用数据库存放授权数据。该表存放授权条目的层次关系。
一:基本概念
角色是 权限 的集合 (例如:建贴、改贴)。一个角色 可以指派给一个或者多个用户。要检查某用户是否有一个特定的权限, 系统会检查该包含该权限的角色是否指派给了该用户。
可以用一个规则 rule 与一个角色或者权限关联。一个规则用一段代码代表, 规则的执行是在检查一个用户是否满足这个角色或者权限时进行的。例如,"改帖" 的权限 可以使用一个检查该用户是否是帖子的创建者的规则。权限检查中,如果该用户 不是帖子创建者,那么他(她)将被认为不具有 "改帖"的权限。
角色和权限都可以按层次组织。特定情况下,一个角色可能由其他角色或权限构成, 而权限又由其他的权限构成。Yii 实现了所谓的 局部顺序 的层次结构,包含更多的特定的 树 的层次。 一个角色可以包含一个权限,反之则不行。(译者注:可理解为角色在上方,权限在下方,从上到下如果碰到权限那么再往下不能出现角色)
二:配置 RBAC
在开始定义授权数据和执行存取检查之前,需要先配置应用组件 yiibaseApplication::authManager 。 Yii 提供了两套授权管理器: yiirbacPhpManager 和 yiirbacDbManager。前者使用 PHP 脚本存放授权数据, 而后者使用数据库存放授权数据。 如果你的应用不要求大量的动态角色和权限管理, 你可以考虑使用前者
1:使用yiirbacPhpManager
return [ // ... "components" => [ "authManager" => [ "class" => "yii bacPhpManager", ], // ... ], ];
配置完成之后你就可以通过Yii::$app->authManager来访问 authManager
yiirbacPhpManager 默认将 RBAC 数据保存在 @app/rbac 目录下的文件中。 如果权限层次数据在运行时会被修改,需确保WEB服务器进程对该目录和其中的文件有写权限。
2:使用yiirbacDbManager
(1)配置yiirbacDbManager
return [ // ... "components" => [ "authManager" => [ "class" => "yii bacDbManager", // 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
执行上面的命令后,这时候在我们的数据库中就会生成上述所说的四个表了
如果你不细化使用命令生成数据库的话,你可以将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的官方文档:https://www.yiichina.com/doc/...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31833.html
摘要:是一个用语言打造的轻量级开源访问控制框架,目前在开源。采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制基于属性的访问控制等。 showImg(https://segmentfault.com/img/bVbkDJf?w=500&h=220); PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架( https://github.com/php...
摘要:在中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。 之前有个朋友问我yii的rbac怎么做,以前大学的时候有接触过,很长时间没用了,也忘记了,正好这几天比较闲,重新捋了下大体思路,希望可以帮到困在yii的r...
摘要:原文来自上一篇文章讲了用户的注册,验证和登录,这一篇文章按照约定来说说之中的用户和权限控制。探寻上面的一些列设置和代码更改,已经实现了一小部分的用户控制登录的用户才能发表。 原文来自: https://jellybool.com/post/programming-with-yii2-user-access-controls 上一篇文章讲了用户的注册,验证和登录,这一篇文章按照...
摘要:是一个用语言打造的轻量级开源访问控制框架,目前在开源。采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制基于属性的访问控制等。 PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架( https://github.com/php-casbin... ),目前在 GitHub 开源。PHP-Casbin 采用了元模型的设计思想,支持多种经典的访问...
阅读 722·2023-04-25 20:32
阅读 2271·2021-11-24 10:27
阅读 4524·2021-09-29 09:47
阅读 2243·2021-09-28 09:36
阅读 3636·2021-09-22 15:27
阅读 2758·2019-08-30 15:54
阅读 373·2019-08-30 11:06
阅读 1273·2019-08-30 10:58