Yii2 RBAC как исключить некоторые права дочерней роли?
Приветствую!
Есть две роли, user и guest.
У guest есть доступ к странице авторизации, назовем этот итем "login".
Guest является дочерней ролью User, т.е. всё что может гость, может и пользователь.
Теперь вопрос - как исключить доступ у пользователя к странице авторизации?
Интересует именно true-way.
Вижу варианты - проверка роли в bizrule/проверка роли в самом экшене. Может я что то упустил и есть другие варианты?
затем, что у гостя есть доступ далеко не ко всему. и если делать одинаковую проверку прав доступа для всех пользователей, то решается это именно через роль для гостя. про наличие данного метода я в курсе
Дмитрий Байчапанов: проверка допустим через Yii::$app->user->can('login'), где ид итема формируется динамически в зависимости от текущего приложения, контроллера и экшена
Никак, если вы начали делать white list, то и продолжайте его, т.е. в Вашем случае придется исключить наследование. Иначе смесь black list и white list будет очень страшной и в реализации и в понимании.
rbac как бы и предполагает делать white list. и предпологает делать наследование ролей. и так же есть оф примеры на сайте yii, где по biz-rule идет ограничение доступа к записи (если не автор). получается, можно так же по biz-rule сделать проверку на текущую роль...?
v0lume: А вы с ними не работали? Один проект был мною заброшен на неделю, затем открываю чтобы коечто поменять и пол часика разбирался в 4 сценариях. Если было б больше я не представляю этот хаос
v0lume: Удобно, не спорю, но понимание происходящего уменьшается в разы, имхо. Кстати по теме, если у вас только с login проблемы, то вам никто ничего не скажет, если напишете правило в контроллере как это сделано в шаблоне самого yii.
Никита: ну дело в том, что я планирую переносить архитектуру с первой версии, а именно - наследовать фронт от базового контроллера, в нем перед выполнением каждого экшена проставить проверку на наличие прав (RBAC). и тут access rules не катят, нужно по-идее использовать biz-rule для login, в котором проверять текущую роль
Можно только через костыль.
У Вас ошибка в наследовании прав, наследование должно быть в порядке возрастания базовых полномочий, т.е. guest->user->moderator->admin.