本文实例讲述了YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用。分享给大家供大家参考,具体如下:
在使用YII2中自带的RBAC时,需要先配置config/web.php:
return [
// ...
'components' => [
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
// ...
],
];
如果你需要运行yii migrate来创建表,那么config/console.php也需要同上面一样配置一下。
cmd进入项目目录,运行如下命令:
yii migrate --migrationPath=@yii/rbac/migrations
你会发现在数据库中创建了四张表
auth_assignment 角色与用户的关联表 auth_item 存放角色与权限,通过type字段区分 auth_item_child 存放角色与权限的上下级关系 auth_rule 规则表,用于扩展权限功能
为了演示,我们在控制器下分别写四个方法,分别用来创建权限,创建角色,指派角色,使用规则。
IndexController.php代码如下:
<?php
namespace app\controllers;
use YII;
use app\models\MyUserLogin;
use app\rbac\UserUpdSelfRule;
use app\controllers\BaseController;
class IndexController extends BaseController
{
//首页
public function actionIndex()
{
$this->renderPartial('index');
}
//登陆
public function actionLogin()
{
if (YII::$app->request->isPost) {
$user = new MyUserLogin();
$user->load(YII::$app->request->post(), '');
if ($user->login()) {
echo '登陆成功';
} else {
echo '登陆失败';
}
} else {
return $this->renderPartial('login');
}
}
//为了演示,这里我们添加几条权限
public function actionPer()
{
$auth = YII::$app->authManager;
//创建用户删除权限
$per = $auth->createPermission('user/del');
$per->description = '删除用户';
$auth->add($per);
//创建用户更新权限
$per = $auth->createPermission('user/upd');
$per->description = '更新用户';
$auth->add($per);
//创建用户添加权限
$per = $auth->createPermission('user/add');
$per->description = '添加用户';
$auth->add($per);
//创建用户查看权限
$per = $auth->createPermission('user/list');
$per->description = '查看用户列表';
$auth->add($per);
}
//添加角色
public function actionRole()
{
$auth = YII::$app->authManager;
//添加管理员角色
$admin = $auth->createRole('admin');
$admin->description = '管理员';
$auth->add($admin);
//给管理员赋予权限
$auth->addChild($admin, $auth->getPermission('user/del'));
$auth->addChild($admin, $auth->getPermission('user/upd'));
$auth->addChild($admin, $auth->getPermission('user/add'));
$auth->addChild($admin, $auth->getPermission('user/list'));
//添加普通员工角色
$employee = $auth->createRole('employee');
$employee->description = '普通员工';
$auth->add($employee);
$auth->addChild($employee, $auth->getPermission('user/list'));
$auth->addChild($employee, $auth->getPermission('user/add'));
}
//给用户指派角色
public function actionAssign()
{
$auth = YII::$app->authManager;
//注意这里的2是用户的ID,即你用户表user里的ID
//也可通过YII::$app->user->id获取
$auth->assign($auth->getRole('admin'), 1);
$auth->assign($auth->getRole('employee'), 2);
}
//添加规则
public function actionRule()
{
$auth = YII::$app->authManager;
$rule = new UserUpdSelfRule();
$auth->add($rule);
//创建权限,与规则关联
$per = $auth->createPermission('user/upd/updSelf');
$per->description = '用户只能修改自已';
$per->ruleName = $rule->name;
$auth->add($per);
//这里,要注意,要把user/upd/updSelf权限设为user/upd的父级
//要不然,普通员工访问user/upd这个方法会被拦住
$auth->addChild($per, $auth->getPermission('user/upd'));
//给普通员工赋予user/upd/updSelf权限,注意我们这里并没有给员工赋予user/upd权限
$auth->addChild($auth->getRole('employee'), $per);
}
}
内容版权声明:除非注明,否则皆为本站原创文章。
