Можно ли в Yii2 узнать родительскую роль пользователя?
У меня есть 3 группы ролей, модератор, администратор, и супер-администратор.
например у пользователя принадлежит к роли "администратор", и естественно ему доступны права "модератора"
так вот. я делаю обычный селект, для перключения роли у пользвателя, в селекте нужно заранее указать что пользователь являеется администратором, поэтому $user->can('administrator') и $user->can('moderator') дадут один и тот же результат, а как получить кончную "главную" роль пользователя?
Дмитрий, хранятся в таблице auth_assigment - тут все данные кому какая роль назначена
само описание роли auth_item, привязки дочерних ролей к родителям auth_tem_child
Один пользователь может иметь роль суперадминистратора, которая в свою очередь пораждает админа, и модератора, т.е. один пользователь по сути может быть и тем и другим и третьим.
Все данные о ролях у меня хранятся в рамках системы RBAC предложенной yii2
vitaly_74, получается, один пользователь - одна роль. Название ролей можно получить из таблицы, нужную роль пользователя - через связь.
can(), думаю, Вам тут не поможет потому, что can() проверяет, может ли пользователь выполнять что-то или нет.
Если пользователь "администратор", то у него есть все права "модератора", а если пользователь "модератор", то он может делать то, что позволено "модератору", но не может делать то, что позволено "администратору".
public function actionUpdate()
{
if(!$user->can('admin'){
throw DomainExeption('Вы не можете выполнить данное действие.');
}
}
Дмитрий, да это я понимаю, спасибо, я другое не понимаю, например у пользователя есть роль "администратор".
и мне нужно вывести его главную роль. Т.е. "Администратора", как это сделать, заранее не зная сколько у меня может быть ролей (роли могут добавляться).
vitaly_74, вариантов может быть несколько.
Первый способ это getRolesByUser() \Yii::$app->authManager->getRolesByUser($user_id);
Можно создать свой метод, для получения роли(не уверен, что это хорошее решение).
public static function currentUserRoleIs($name) {
return $userRole = current(ArrayHelper::getColumn(Yii::$app->authManager->getRolesByUser(Yii::$app->user->id), 'name'));
}
Можно записывать присвоенную роль в таблицу пользователей...
Вот Вам видео в помощь для разбора работы с RBAC в YII.
И статья, в которой описано, как можно упростить работу с rbac, раз у Вас нет сложной системы распределения доступа.