Почему не работает RBAC в Yii2?

Привет!
Собственно вопрос. Создаю роль, создаю разрешение, прикрепляю разрешение к роли. Добавляю роль к пользователю.
Но почему то пользователь с такой ролю доступа не получает.

Как:
$auth = \Yii::$app->authManager;

            $admin = $auth->createRole('admin');
            $auth->add($admin);

            $showFilter = $auth->createPermission('showFilter');
            $showFilter->description = "Показать фильтр";
            $auth->add($showFilter);

            $auth->addChild($admin, $showFilter);

            $auth->assign($admin, 76);


Но вызов
Yii::$app->user->can('showFilter')
почему то возвращает false. Помогите понять почему. Все делал по документации. Как тут Authorization

UPDATE:
Если написать
Yii::$app->user->can('admin')
то доступ есть, не работает именно через "разрешение" привязанной к роли. Если даже роль к роли привязать, то доступ через дочернюю роль он не получает (
  • Вопрос задан
  • 1065 просмотров
Решения вопроса 1
Demetriy
@Demetriy
веб и мобильная разработка
Возможно у вас включен кеш для RBAC, поищите строку "'authManager' => [" в проекте, если имеет подобный вид:
'authManager' => [
    'class' => 'yii\rbac\DbManager',
    'cache' => 'cache'
],


Значит кеш RBAC включен, удалите на деве 'cache' => 'cache' и будет норм или инвалидируйте кеш:
Yii::$app->authManager->invalidateCache();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
27cm
@27cm
TODO: Написать статус
Yii::$app->user->getId() == 76?
Ответ написан
@Yevgenii888
Понимаю, что тема старая, но для новичков, как я, до сих пор актуальная. В моём случае проблема заключалась в том, что я вместе с созданием ролей и привелегий сразу попытался прикрутить туда ещё и правила, в которых с самого начала накосячил и забыл про них. Как только закомментировал правила (ruls) - всё заработало.

<?php
namespace console\controllers;

use Yii;
use yii\console\Controller;
use common\components\rbac\UserRoleRule;

class RbacController extends Controller
{
public function actionInit()
{
$auth = Yii::$app->authManager;
$auth->removeAll(); //удаляем старые данные
//Создадим для примера права для доступа к админке

// добавляем разрешение "enterInFrontend"
$enterInFrontend = $auth->createPermission('enterInFrontend');
$enterInFrontend->description = 'Вход в frontend';
$auth->add($enterInFrontend);

// добавляем разрешение "enterInBackend"
$enterInBackend = $auth->createPermission('enterInBackend');
$enterInBackend->description = 'Вход в админку';
$auth->add($enterInBackend);

// добавляем разрешение "adminControl"
$adminControl = $auth->createPermission('adminControl');
$adminControl->description = 'Контроль за модераторами';
$auth->add($adminControl);


//Включаем наш обработчик
// $rule = new UserRoleRule();
// $auth->add($rule);


//Добавляем роли
$simpleUser = $auth->createRole('simpleUser');
$simpleUser->description = 'роль: Пользователь';
// $simpleUser->ruleName = $rule->name;
$auth->add($simpleUser);

$moder = $auth->createRole('moder');
$moder->description = 'роль: Модератор';
// $moder->ruleName = $rule->name;
$auth->add($moder);

$admin = $auth->createRole('admin');
$admin->description = 'роль: Администратор';
// $admin->ruleName = $rule->name;
$auth->add($admin);

//Добавляем потомков
$auth->addChild($simpleUser, $enterInFrontend);
$auth->addChild($moder, $enterInBackend);
$auth->addChild($admin, $adminControl);

$auth->addChild($moder, $simpleUser);
$auth->addChild($admin, $moder);
}

Внимательность - наше всё!
Теперь будем разбираться зачем нужны правила.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы