@bagos

Как правильно организовать цепочку ролей rbac?

Добрый вечер.
Задача следующая. Нужно чтобы при проверке actionCreate, для роли admin происходила проверка только роли RoleA с правилом RuleA, а для роли manager сначала прогонялась роль RoleA с правилом RuleA, затем RoleB с правилом RuleB. Вот схема ролей.
5e7b9f1aa43f7363864485.png
В моем понимании проверка ролей идет в обратную сторону.
В AuthItemChild
admin - roleA
roleB - roleA
manager - roleB
В контроллере:
'allow' => true,
'roles' => ['roleA'],
'actions' => ['create'],


В данном случае, при вызове actionCreate, для пользователя с ролью manager, вызывается роль, затем рольБ, и для admin также перебираются все роли, сначала рольА, затем рольБ, как исключить для пользователя с ролью админ проверку ролиБ ? Данный пример сильно упростил, хочется понять как правильно строить цепочки из ролей с правилами.
Или же стоит делать так? Что тоже сомнительно, ведь тогда придётся прописывать доступы для каждой роли отдельно.
Что то вроде
'allow' => true,
'roles' => ['admin'],
'actions' => ['create'],
'matchCallback' => function($rule, $action){
        return Yii::$app->user->can('roleA');
    },
'allow' => true,
'roles' => ['manager'],
'actions' => ['create'],
'matchCallback' => function($rule, $action){
        return Yii::$app->user->can('roleC');
    }

5e7c41c034a26604656987.png
Заранее спасибо!
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
kimono
@kimono
Web developer
Пишу с телефона, поэтому не могу проверить.
Но попробуйте использовать matchCallback
[
    'actions' => ['create'],
    'roles' => ['roleA'],
    'matchCallback' => function($rule, $action){
        return Yii::$app->user->can('ruleA');
    }
]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы