у группы доступ к 'sms/*'. нужно показать кнопку ведущую на 'sms/mailing' только тем кто имеет туда доступ.
Yii::$app->user->can('sms/mailing') or Yii::$app->user->can('sms/*') - не работают, кнопка не показывается. но как же так, ведь 'sms/*' включает в себя 'sms/mailing' ??? неужели надо прописать персональное правило для каждого такого случая?
rbac вложенный маршрут
Re: rbac вложенный маршрут
Мда, пошло это ещё с yii1....
Маршруты(роуты) никак не связаны с RBAC, у RBAC есть два понятия: роли и разрешения - больше ничего!
В данном случае смешались наименования разрешения и "маршруты".
Если вам надо установить права доступа к sms/mailing, то вам надо создать одно разрешение.
дальше создать роль SMS и назначить этой роли разрешение smsMailing.
Теперь у вас есть роль SMS, назначаете её группе и эта группа будет иметь доступ к разрешению smsMailing. И проверяете только
внутренний механизм RBAC проверит есть ли у пользователя разрешение smsMailing, согласно его роли и предоставит или откажет в доступе к требуемому элементу. Так что никакое "персональное правило" прописывать не нужно.
Маршруты(роуты) никак не связаны с RBAC, у RBAC есть два понятия: роли и разрешения - больше ничего!
В данном случае смешались наименования разрешения и "маршруты".
Если вам надо установить права доступа к sms/mailing, то вам надо создать одно разрешение.
Код: Выделить всё
$auth = Yii::$app->authManager;
$smsMailing= $auth->createPermission('smsMailing');
$auth->add($smsMailing);
Теперь у вас есть роль SMS, назначаете её группе и эта группа будет иметь доступ к разрешению smsMailing. И проверяете только
Код: Выделить всё
Yii::$app->user->can('smsMailing')
Re: rbac вложенный маршрут
спасибо, все работает