RBAC и наследование правил

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
indeego
Сообщения: 17
Зарегистрирован: 2014.10.20, 05:54
Откуда: Омск

RBAC и наследование правил

Сообщение indeego »

Ребята всем привет.
Занимаюсь разграничением прав в приложении и наткнулся на очень интересную вещь, которая не раскрыта до конца в документации и других туториалах.
Суть такова: есть три роли админ > оператор > эксперт > гость ( я показал иерархию от админа до гостя, как это сделано у меня в системе)
Проблема: создав ряд правил и присвоив их к эксперту я не могу получить доступа из под роли оператор ( выше указано что это должно быть возможно).
В коде реализовано очень все просто ( фрагмент RbacController):

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

        $authManager = \Yii::$app->authManager;

        // Create roles
        $guest  = $authManager->createRole('guest');
        $curator  = $authManager->createRole('curator');
        $operator = $authManager->createRole('operator');
        $admin  = $authManager->createRole('admin');
        
        //Ticket processing
        $viewOpenTicket = $authManager->createPermission('viewOpenTicket');
        
         // Add permissions in Yii::$app->authManager
         $authManager->add($viewOpenTicket);
         
        // Add rule, based on UserExt->group === $user->group
        $userGroupRule = new UserGroupRule();
        $authManager->add($userGroupRule);

        // Add rule "UserGroupRule" in roles
        $guest->ruleName  = $userGroupRule->name;
        $curator->ruleName  = $userGroupRule->name;
        $operator->ruleName = $userGroupRule->name;
        $admin->ruleName  = $userGroupRule->name;
        //Для эксперта
        $authManager->addChild($curator,$viewOpenTicket);
        
         //Добавляю curator 
        $authManager->addChild($operator, $curator);

Как итог - из под роли "оператор" я не имею права использовать правило "viewOpenTicket". ( я сознательно опустил информацию о других правилах). В сознании почему то есть понимание того, что при установке дочернего "чегото", я наследую от этого "чегото" все правила. Но в реальности совсем не так. Возможно кто то сможет подсказать в чем причина.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: RBAC и наследование правил

Сообщение lynicidn »

у ролей не должно быть rule делайте через permissions
indeego
Сообщения: 17
Зарегистрирован: 2014.10.20, 05:54
Откуда: Омск

Re: RBAC и наследование правил

Сообщение indeego »

Поясните пожалуйста, я если честно не понял вас.
Следуя официальной документации и куче других туториалов, путь здесь один: 1)создать роль 2) создать разрешения 3) перевязать их. Что я собственно и сделал.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: RBAC и наследование правил

Сообщение lynicidn »

сорри, переигралось же, у вас верно все, я UserGroupRule не видел в глаза, это видимо раньше identity->role было и вы его там сверяете
но вообще как бы rule позволяет проверять с учетом переданных параметров, а у роли не должны зависеть от параметров - возможно не ясно выше высказался
indeego
Сообщения: 17
Зарегистрирован: 2014.10.20, 05:54
Откуда: Омск

Re: RBAC и наследование правил

Сообщение indeego »

Самое забавное что при вызове getPermissionsByRole('operator') , в массиве присутствует "viewOpenTicket". Но при проверке через ->can возвращается false
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: RBAC и наследование правил

Сообщение lynicidn »

значит вам не присваивается роль или ваш UserGroupRule не желаемое отдает
indeego
Сообщения: 17
Зарегистрирован: 2014.10.20, 05:54
Откуда: Омск

Re: RBAC и наследование правил

Сообщение indeego »

Удалил вот это:

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

$guest->ruleName  = $userGroupRule->name;
        $curator->ruleName  = $userGroupRule->name;
        $operator->ruleName = $userGroupRule->name;
        $admin->ruleName  = $userGroupRule->name;
Перегенерил - заработало :? , но опять не правильно
Закрыто