获得用户角色 - Yii2
To Get Role Of A User - Yii2
我正在搜索登录用户的用户角色,我不知道如何打印用户角色名称。我试过这个:
$Role = Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
什么时候,我做到了print_r($Role)
;我明白了:
Array ( [superadmin] => yii\rbac\Role Object ( [type] => 1 [name] => superadmin [description] => Super admin can do any operation in the application [ruleName] => [data] => [createdAt] => [updatedAt] => ) )
我正在寻找特定的角色名称,但我无法访问
Array ( [superadmin] => yii\rbac\Role Object ........)
^ unable to access this name.
输入 print_r($Role[0]->name);
时出现
之类的错误
PHP Notice – yii\base\ErrorException
Undefined offset: 0
而且,如果我喜欢这种方式(意味着,手动将 $rolename
传递给数组索引)它正在工作。
$roleName = 'superadmin';
print_r($Role[$roleName]->name);
为什么会出现这个要求,因为对于登录用户来说没关系。但是,如果我想知道其他用户角色名称,那么我需要在此处传递该索引名称 $Role[$roleName]->name
请帮助我访问此 'superadmin'。我不知道如何获取它的索引名称。
Array ( [superadmin] => yii\rbac\Role Object
^ unable to access this name.
我也查了Get User Role & Specific Role Of User
您的数组没有 0
索引。正如 documentation 所说,数组由角色名称索引。
因此,如果您拥有 100% 的权限,则所有用户将始终只有一个角色。你可以这样称呼它:
print_r(reset($Role));
但是如果用户可以有多个角色,你可以使用一个循环:
foreach ($Role as $each) {
print_r($each);
}
因此您可以使用 array_shift。它是 return 数组的第一个元素,例如:
if(is_array($Role))array_shift($Role)->name;
用户可以拥有多个角色,在authManager
中没有为用户只获得一个角色的方法。
您可以在一个角色的情况下使用此代码(我建议将其放在 User
模型中以保持代码更简洁):
/**
* Returns user role name according to RBAC
* @return string
*/
public function getRoleName()
{
$roles = Yii::$app->authManager->getRolesByUser($this->id);
if (!$roles) {
return null;
}
reset($roles);
/* @var $role \yii\rbac\Role */
$role = current($roles);
return $role->name;
}
不需要检查数组,因为 getRolesByUser
已经 returns 一个数组。
或者您可以按照建议使用 array_shift
here or return a key of array element because it's indexed by names (described here)。
由于这种索引,您无法获得数组的 0
元素(它根本不存在)。这就是你得到 Undefined offset: 0
异常的原因。
视图中的用法示例:
<?php if (!Yii::$app->user->isGuest) { ?>
<div class="user-role"><?= Yii::$app->user->identity->getRoleName() ?></div>
<?php } ?>
$getRolesByUser = Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
$Role = array_keys($getRolesByUser)[0];
我认为最好的方法是:
if (array_key_exists('Admin', \Yii::$app->authManager->getRolesByUser(Yii::$app->user->id))) { ... }
PS 以上为“管理员”角色。
我正在搜索登录用户的用户角色,我不知道如何打印用户角色名称。我试过这个:
$Role = Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
什么时候,我做到了print_r($Role)
;我明白了:
Array ( [superadmin] => yii\rbac\Role Object ( [type] => 1 [name] => superadmin [description] => Super admin can do any operation in the application [ruleName] => [data] => [createdAt] => [updatedAt] => ) )
我正在寻找特定的角色名称,但我无法访问
Array ( [superadmin] => yii\rbac\Role Object ........)
^ unable to access this name.
输入 print_r($Role[0]->name);
时出现
PHP Notice – yii\base\ErrorException
Undefined offset: 0
而且,如果我喜欢这种方式(意味着,手动将 $rolename
传递给数组索引)它正在工作。
$roleName = 'superadmin';
print_r($Role[$roleName]->name);
为什么会出现这个要求,因为对于登录用户来说没关系。但是,如果我想知道其他用户角色名称,那么我需要在此处传递该索引名称 $Role[$roleName]->name
请帮助我访问此 'superadmin'。我不知道如何获取它的索引名称。
Array ( [superadmin] => yii\rbac\Role Object
^ unable to access this name.
我也查了Get User Role & Specific Role Of User
您的数组没有 0
索引。正如 documentation 所说,数组由角色名称索引。
因此,如果您拥有 100% 的权限,则所有用户将始终只有一个角色。你可以这样称呼它:
print_r(reset($Role));
但是如果用户可以有多个角色,你可以使用一个循环:
foreach ($Role as $each) {
print_r($each);
}
因此您可以使用 array_shift。它是 return 数组的第一个元素,例如:
if(is_array($Role))array_shift($Role)->name;
用户可以拥有多个角色,在authManager
中没有为用户只获得一个角色的方法。
您可以在一个角色的情况下使用此代码(我建议将其放在 User
模型中以保持代码更简洁):
/**
* Returns user role name according to RBAC
* @return string
*/
public function getRoleName()
{
$roles = Yii::$app->authManager->getRolesByUser($this->id);
if (!$roles) {
return null;
}
reset($roles);
/* @var $role \yii\rbac\Role */
$role = current($roles);
return $role->name;
}
不需要检查数组,因为 getRolesByUser
已经 returns 一个数组。
或者您可以按照建议使用 array_shift
here or return a key of array element because it's indexed by names (described here)。
由于这种索引,您无法获得数组的 0
元素(它根本不存在)。这就是你得到 Undefined offset: 0
异常的原因。
视图中的用法示例:
<?php if (!Yii::$app->user->isGuest) { ?>
<div class="user-role"><?= Yii::$app->user->identity->getRoleName() ?></div>
<?php } ?>
$getRolesByUser = Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
$Role = array_keys($getRolesByUser)[0];
我认为最好的方法是:
if (array_key_exists('Admin', \Yii::$app->authManager->getRolesByUser(Yii::$app->user->id))) { ... }
PS 以上为“管理员”角色。