Yii框架之Rbac

来源:互联网 发布:算法基础第五版答案 编辑:程序博客网 时间:2024/05/22 01:48

                                      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);

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

例:为id6的用户解除admin角色

//先获取要解除的角色

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

//最后解除绑定

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

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

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

1 0
原创粉丝点击