Yii2 RBAC Как узнать роль пользователя?

201
22 июля 2018, 10:00

Работаю с RBAC в Yii2.
Существует иерархия юзеров сайта.
Если совсем грубо пользователь -> редактор -> админ
То-есть редактор наследует права пользователя, а админ наследует права редактора.
Мне нужно сделать, например, условие что наш юзер является именно редактором, не админом.
Как сделано сейчас:

Yii::$app->user->can('редактор') && !Yii::$app->user->can('админ')  

Можно как-нибудь сделать одной командой, вроде Yii::$app->user->is('редактор') или что-то подобное?

Answer 1

Таким же вопросом недавно задался. Единственное что я смог придумать это написал статичный класс хелпер с методом:

public static function currentUserRoleIs($name) {
    $userRole = current(ArrayHelper::getColumn(Yii::$app->authManager->getRolesByUser(Yii::$app->user->id), 'name'));
    return $name == $userRole;
}

Костыль наверное, но лучшего способа я не нашел...

Answer 2

Вероятно нарушена архитектура ролей, если возникает такая сложность. Админу не обязательно наследовать роль редактора, можно просто для админа добавить такие же пермишены, как у редактора. Админ, все таки отдельная и самостоятельная роль, которая не должна зависеть от других ролей. Я бы сделал что-то подобное:

Проверятор - Модератор - Администратор

Вычитыватель - Редактор - Журналист

READ ALSO
Неправильная сортировка на php

Неправильная сортировка на php

Есть скрипт, который находит все картинки в папке и выводит ихТолько получается на локальном хостинге выводит как надо (все картинки пронумерованы,...

175
Ошибка загрузки файла yii2

Ошибка загрузки файла yii2

В ЧЕМ ПРОБЛЕМА!? УЖЕ второй день не могу понять, вроде все верно

184
Нахождение объекта в поле зрения OpenGL

Нахождение объекта в поле зрения OpenGL

Надо найти находится ли объект в поле зренияДля этого можно его вписать в сферу и остаётся только узнать видна ли сфера

187