RBAC
RBAC权限管理,通过管理角色的权限,赋予用户角色来实现权限管理。通过创建路由权限,来进行管理,实际上可以理解为管理路由的访问权限。
首先,我们需要一个权限管理器的组件
我们需要在config中配置
具体配置方法可以参考http://www.yiichina.com/doc/guide/2.0/security-authorization#rbac
...
'components' => [
'authManager' =>[
'class'=>\yii\rbac\DbManager::className()
]
]
然后,我们可以通过数据迁移,得到rbac的权限表
在项目根目录下运行:
yii migrate --migrationPath=@yii/rbac/migrations
这些都准备好了,我们可以开始使用rbac了
因为在组件中配置了,我们可以直接使用组件调用方式使用权限管理器
在使用组件的时候都得先获取到权限管理器:
$authObj = Yii::$app->authManager;
下面通过代码的形式来实现创建权限和角色
//获取权限管理器
$authObj = Yii::$app->authManager;
/**
* 创建权限
*/
//创建权限,并添加描述信息
$permission = $authObj->createPermisson('我是权限的名字');
$permission->description = '我是权限的描述信息';
//添加权限到权限管理器中
$authObj->add($permission);
/**
* 创建角色
*/
//创建角色,并添加描述信息
$role = $authObj->createRole('我是角色的名字');
$role->description='我是角色的描述信息';
//把角色添加到权限管理器中
$authObj->add($role);
//给角色赋予权限
$authObj->addChild($role,$permission);
//给用户添加角色,通过用户的id和角色关联起来
$authObj->assign($role,$userId);
下面介绍一些常用的rbac方法
$auth = Yii::$app->authManager;
//获取权限对象
$permission = $auth->getPermission('权限名');
//获取角色对象
$role = $auth->getRole('角色名');
//删除权限或角色都可以通过remove方法
$auth->remove($permission);
$auth->remove($role);
//通过update方法可以修改权限或角色
$new_permission = $auth -> createPermission('我是新的权限');
$new_role = $auth -> createRole('我是新的角色');
//$name为旧权限或旧角色的名字
$auth -> update($name,$new_permission);
$auth -> update($name,$new_role);
//获取角色拥有的权限,返回值为二维数组,键名为权限名
$permissions = $auth->getPermissionsByRole('角色名');
//获取用户被赋予的角色,通过用户id获取
$roles = $auth->getAssignments($userId);
//删除角色的所有权限
$auth->removeChildren('角色名');
//回收用户拥有的所有角色
$auth->revokeAll($userId);
其余的方法可以查看接口说明。里面有所有的方法