【发布时间】:2015-03-09 07:09:20
【问题描述】:
我正在关注 Yii 2.0 的权威指南。在我的应用程序中,我有两个角色:管理员,可以做任何事情;查看者,可以做一些未注册用户不能做的操作。我正在尝试使用 Yii 2 RBAC 的默认角色功能,但它似乎不起作用。我的数据库中的用户表有一个名为“role”的列:对于管理员,它的值设置为 1,对于查看器 = 2。
我做了什么:
/app/rbac/UserGroupRule.php
namespace app\rbac;
use Yii;
use yii\rbac\Rule;
class UserGroupRule extends Rule {
public $name = 'userGroup';
public function execute($user, $item, $params) {
if (!Yii::$app->user->isGuest) {
$group = Yii::$app->user->identity->role;
if ($item->name === 'admin') {
return $group == 1;
} elseif ($item->name === 'viewer') {
return $group == 1 || $group == 2;
}
}
return false;
}
}
$auth = Yii::$app->authManager;
$rule = new \app\rbac\UserGroupRule;
$auth->add($rule);
$author = $auth->createRole('viewer');
$author->ruleName = $rule->name;
$auth->add($viewer);
$admin = $auth->createRole('admin');
$admin->ruleName = $rule->name;
$auth->add($admin);
$auth->addChild($admin, $viewer);
在我的控制器中:
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['admin'],
'rules' => [
[
'allow' => true,
'actions' => ['admin'],
'roles' => ['admin'],
],
],
],
];
}
当我尝试访问“管理员”操作时,它会显示 Forbidden #403,即使我是管理员也是如此。如何让它发挥作用?
【问题讨论】: