Я пытаюсь разработать приложение yii2, в котором участники имеют две роли: администратор и участник. Итак, я следовал методу роли по умолчанию, как описано в документация yii2.У меня есть таблица с именем ‘member’ в БД, которую я использую для входа в систему вместо модели User.php.
Мой файл конфигурации web.php
'authManager' => [
'class' => 'yii\rbac\PhpManager',
'defaultRoles' => ['admin', 'member'],
],
'user' => [
'identityClass' => 'app\models\Member',
'enableAutoLogin' => true,
],
Я создал папку rbac в каталоге приложения и добавил UserGroupRule.php, как показано ниже:
use Yii;
use yii\rbac\Rule;
/**
* Checks if user group matches
*/
class UserGroupRule extends Rule
{
public $name = '';
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 === 'member') {
return $group == 1 || $group == 2;
}
}
return false;
}
}
$auth = Yii::$app->authManager;
$rule = new \app\rbac\UserGroupRule;
$auth->add($rule);
$member = $auth->createRole('member');
$member->ruleName = $rule->name;
$auth->add($member);
// ... add permissions as children of $author ...
$admin = $auth->createRole('admin');
$admin->ruleName = $rule->name;
$auth->add($admin);
$auth->addChild($admin, $member);
В рамках тестирования добавили этот бит кода в один из контроллеров:
'access' => [
'class' => AccessControl::className(),
'only' => ['index', 'view', 'create', 'update', 'delete'],
'rules' => [
[
//'actions' => ['admin'],
'allow' => true,
'roles' => ['admin'],
],
],
],
Проблема в том, что она выдает ошибку Forbidden (# 403), даже когда я пытаюсь получить доступ к одному из действий (например, index) в качестве администратора. Итак, что я пропускаю? Пожалуйста помоги!
Постскриптум Как уже упоминалось, я использую БД для входа в систему. Если вы хотите, посмотрите на member.php модель.
Я нашел свой ответ. Это сработало наконец!
Казалось, что-то было с кешем. После перезагрузки браузера и ПК все заработало.
Других решений пока нет …