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

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

Я искал и читал руководство по Yii2, но не нашел решения.


person b24    schedule 11.08.2014    source источник


Ответы (8)


Вы можете получить роли для пользователя, используя функция getRolesByUser

Вы можете использовать это так

\Yii::$app->authManager->getRolesByUser($user_id);
person Manquer    schedule 11.08.2014
comment
Спасибо чувак. Это работа для меня. Также я использую User::findByUsername($user_name)-›getId() для передачи идентификатора в функцию getRolesByUser() - person b24; 22.08.2014
comment
если вы хотите получить имя роли в виде строки, а не массива, используйте это: `$userRole = array_keys(Yii::$app-›authManager-›getRolesByUser($user_Id))‌​[0] ` - person Shaig Khaligli; 13.10.2017
comment
Если вы используете defaultRoles, он также вернет их, независимо от того, существуют ли какие-либо правила, которые фактически не позволяют им брать на себя эти роли! - person TheStoryCoder; 25.06.2019

Вы можете использовать:

Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
person d4v1d    schedule 18.12.2014
comment
но это возвращает массив всех ролей, а не роль пользователя. - person Awais Mustafa; 12.03.2018
comment
@AwaisMustafa Я должен проверить это еще раз, потому что getRolesByUser(Yii::$app-›user-›getId()) вернет только роли этого пользователя. - person d4v1d; 04.08.2018
comment
@AwaisMustafa Это потому, что вы используете defaultRoles? Если это так, то кажется, что правила не применяются, и, следовательно, вы увидите эти роли по умолчанию в любом случае.... - person TheStoryCoder; 25.06.2019

Я использую :

if (\Yii::$app->authManager-> getAssignment($role,$rule_id))

для фильтрации user id и role в rbac, Подробнее см. Документация Yii2

person elfarqy    schedule 22.06.2016
comment
Передаваемый параметр должен быть не $rule_id, а $user_id. Незначительная небольшая опечатка согласно документации. Спасибо, в любом случае. Я использовал его в своем контроллере. Я проголосовал за вас. - person Addi; 23.04.2020

Еще один пример, как получить роль пользователя:
Yii::$app->getUser()->identity->role;
Это работает, если у вас есть столбец с именем «роль» в вашей пользовательской таблице.

person Denis Solovyov    schedule 20.06.2017

Вы можете использовать :

 $user =[];
 $userAssigned = Yii::$app->authManager->getAssignments(user_id);
 foreach($userAssigned as $userAssign){
      $user[] = $userAssign->roleName;
 } 
person Mohan Prasad    schedule 08.09.2017

Если вы используете модуль amnah/yii2-user, вы можете использовать это:

Yii::$app->user->identity->role->name

Это даст вам текущее имя роли пользователя

person Imtiaz    schedule 09.08.2018

Хорошим и более наглядным решением будет установка констант всех ролей.

$userID = $user->getId();
array_keys(Yii::$app->authManager->getRolesByUser($userID))[0] == User::ROLE_NAME
person Alliswell    schedule 01.11.2018
comment
Ответы только на код не годятся. Пожалуйста, добавьте некоторые пояснения к вашему ответу. - person Madhur Bhaiya; 01.11.2018

Вы можете получить роль пользователя с помощью команды create.

    $roleModel = Yii::$app->db
    ->createCommand("Select * from auth_assignment where user_id='889'")
    ->queryOne();

    echo $roleModel['item_name'];

Это будет ваша роль пользователя в назначении аутентификации. Теперь вы можете проверить, является ли пользователь администратором, редактором или участником.

person Awais Mustafa    schedule 12.03.2018
comment
Гораздо проще использовать методы, которые фреймворк должен проверять на роль (принятый ответ), чем делать запрос к базе данных и проверять вручную. - person André; 12.03.2018
comment
я столкнулся с этой проблемой, что в коде я много пытался получить имя роли администратора, но я успешно выполнил этот запрос, поэтому я поделился этим, чтобы он мог помочь любому другому - person Awais Mustafa; 17.03.2018