Не срабатывает проверка у одной роли

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
nordast
Сообщения: 3
Зарегистрирован: 2017.11.23, 11:31

Не срабатывает проверка у одной роли

Сообщение nordast »

Создал в rbac несколько ролей. У всех ролей проверка доступа срабатывает, кроме одной. Не могу понять - почему?

common/config/main.php

Код: Выделить всё

        'authManager' => [
            'class'          => 'yii\rbac\PhpManager',
            "assignmentFile" => '@common/rbac/assignments.php',
            "itemFile"       => '@common/rbac/items.php',
            "ruleFile"       => '@common/rbac/rules.php',
            'defaultRoles' => ['user', 'manager', 'analyst'],
        ],
console/controllers/RbacController.php

Код: Выделить всё

    public function actionInit()
    {
        $auth = Yii::$app->authManager;
        $auth->removeAll();

        $userRule = new UserGroupRule;
        $auth->add($userRule);

        $user = $auth->createRole(User::ROLE_USER);
        $user->ruleName = $userRule->name;
        $auth->add($user);

        $analyst = $auth->createRole(User::ROLE_ANALYST);
        $analyst->ruleName = $userRule->name;
        $auth->add($analyst);
        $auth->addChild($analyst, $user);

        $manager = $auth->createRole(User::ROLE_MANAGER);
        $manager->ruleName = $userRule->name;
        $auth->add($manager);
        $auth->addChild($manager, $user);

        // add the rule accessOwn
        $ownRuleAccess = new OwnModelRule();
        $auth->add($ownRuleAccess);

        $accessOwn = $auth->createPermission('ownModelRule');
        $accessOwn->ruleName = $ownRuleAccess->name;
        $auth->add($accessOwn);

        $auth->addChild($user, $accessOwn);

        Console::output('Success! RBAC roles has been added.');
    }
common/rbac/OwnModelRule.php

Код: Выделить всё

    public $name = 'ownModelRule';

    public function execute($user, $item, $params)
    {
        return true;
    }
При проверки с помощью can

Код: Выделить всё

Yii::$app->user->can('ownModelRule')
для роли USER и MANAGER возвращается как и положено true
а вот для роли ANALYST - false

Хотя и ANALYST и MANAGER одинаково имею те же права, что и USER
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Не срабатывает проверка у одной роли

Сообщение maleks »

Зачем вы в can имя правило запихнули?
Yii2 universal module sceleton - for basic and advanced templates
nordast
Сообщения: 3
Зарегистрирован: 2017.11.23, 11:31

Re: Не срабатывает проверка у одной роли

Сообщение nordast »

maleks писал(а): 2017.11.24, 08:05 Зачем вы в can имя правило запихнули?
так указано в документации
http://www.yiiframework.com/doc-2.0/gui ... cess-check
if (\Yii::$app->user->can('updatePost', ['post' => $post])) {
// update post
}
я так же передаю в can дополнительные данные в параметрах, но тут указал упрощеную тестовую ситуацию, которая то же не работает как задумано
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Не срабатывает проверка у одной роли

Сообщение Nex-Otaku »

Всё должно работать. Сбросьте кеш, удалите временные файлы и разлогиньтесь. Потом попробуйте войти и проверить ещё раз.
nordast
Сообщения: 3
Зарегистрирован: 2017.11.23, 11:31

Re: Не срабатывает проверка у одной роли

Сообщение nordast »

Nex-Otaku писал(а): 2017.11.27, 20:30 Всё должно работать.
Тоже так думал. Все это делал. Даже завел отдельный чистый проект и там так же настроил. Проблема повторилась.
Помогает только, если добавить в конец console/controllers/RbacController.php:
$auth->addChild($analyst, $accessOwn);
Но все равно, не понятно почему без этого у MANAGER работает, а у ANALYST - нет
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Не срабатывает проверка у одной роли

Сообщение Nex-Otaku »

Ну, тут отладка помогла бы )
Ответить