Задать вопрос
  • Почему не работает RBAC в Yii2?

    @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);
    }

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