Yii框架之Rbac

Yii 提供了两套授权管理器: yii\rbac\PhpManager 和 yii\rbac\DbManager。前者使用 PHP 脚本存放授权数据, 而后者使用数据库存放授权数据。在这里我要讲的是Dbmanager

 

第一步:以yii框架基础模板为例,要使用yii框架自带的rbac,首先要在config目录下的web.php文件的components数组内加入以下代码:

DbManager使用4个数据库表存放它的数据:

· yii\rbac\DbManager::$itemTable: 该表存放授权条目(译者注:即角色和权限)。默认表名为 "auth_item" 。

· yii\rbac\DbManager::$itemChildTable: 该表存放授权条目的层次关系。默认表名为 "auth_item_child"。

· yii\rbac\DbManager::$assignmentTable: 该表存放授权条目对用户的指派情况。默认表名为 "auth_assignment"。

· yii\rbac\DbManager::$ruleTable: 该表存放规则。默认表名为 "auth_rule"。

 

第二步:导入yii框架的rbac表

在yii框架中basic\vendor\yiisoft\yii2\rbac\migrations目录下有个

schema-mysql.sql文件,导入数据库即可生成四个表

 

第三步:在控制器中的写法

★记得先调用$auth = Yii::$app->authManager;

 

一、添加权限

例:①添加"rbac/index"权限

$createPost = $auth->createPermission('rbac/index');

$createPost->description = 'rbac 首页';

$auth->add($createPost);

 

二、添加角色

例:②添加"admin"角色

$author = $auth->createRole('admin');

$auth->add($author);

 

三、给角色赋权限

例:③获取角色,获取权限,给角色赋权限

$author = $auth->getRole('admin');

$quanxian = $auth->getPermission('rbac/index');

$auth->addChild($author,$quanxian);

 

四、给用户赋角色

例:④获取用户,获取角色,给用户赋角色

$author = $auth->getRole('admin');//获取角色

$auth->assign($author, 6);//第一个参数是角色,第二个参数是用户id

 

五、获取当前页的控制器和方法

//获取当前控制器名

$controller = Yii::$app->controller->id;

//获取当前方法名

$action = Yii::$app->controller->action->id;

 

六、检验该用户是否拥有该权限

//第一个参数为用户id,第二个参数为权限;

$auth->checkAccess('35','rbac/index');

 

七、修改权限(记得先声明use yii\rbac\Permission;)

例:把权限rbac/index修改成rbac/update权限

$permission = new Permission();

$permission->name = trim( 'rbac/update');

$permission->type = '2';

$permission->description = 'rbac 修改';

//第一个参数是要修改的权限(该权限名),第二参数是修改成什么

$auth->update('rbac/index',$permission);

 

八、修改角色(记得先声明use yii\rbac\Role;)

例:把admin角色修改成home角色

$role = new Role();

$role->name = 'home';

$role->type = '1';

// 第一个参数是要修改的角色(该角色名),第二参数是修改成什么

$auth->update('admin',$role);

 

九、删除权限(凡是和该权限有关的角色赋权也消失)

例:删除rbac/index权限

//先获取该权限

$quanxian = $auth->getPermission('rbac/index');

///再删除该权限

$auth->remove($quanxian);

 

十、删除角色(该角色赋权的数据也会被删除)

例:删除admin角色

//先获取该角色

$author = $auth->getRole('admin');

///再删除该角色

$auth->remove($author);

 

十一、解除角色的某个权限

例:解除admin角色的rbac/Index权限

//先获取要解除的角色

$author = $auth->getRole('admin');

//再获取要解除的权限

$quanxian = $auth->getPermission('rbac/index');

//最后解除绑定

$auth->removeChild($author,$quanxian);

 

十二、解除用户的某个角色

例:为id为6的用户解除admin角色

//先获取要解除的角色

$author = $auth->getRole('admin');

//最后解除绑定

//第一个参数是要解除的角色,第二个参数是用户id

// $auth->revoke($author,6);

 

注释:还有规则约束,详解可看手册或百度

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值