Nan*_*kar 1 php yii2 yii2-advanced-app yii2-basic-app yii2-user-roles
我正在为登录用户搜索用户角色,我没有得到如何打印用户角色名称.我试过这个:
$Role = Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
Run Code Online (Sandbox Code Playgroud)
什么时候,我做了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] => ) )
Run Code Online (Sandbox Code Playgroud)
我希望获得特定的角色名称,但我无法访问
Array ( [superadmin] => yii\rbac\Role Object ........)
^ unable to access this name.
Run Code Online (Sandbox Code Playgroud)
打字时print_r($Role[0]->name);我得到的错误就像
PHP注意 - yii\base\ErrorException
未定义的偏移量:0
并且,如果我喜欢这种方式(意味着,手动传递$rolename给数组索引)它正在工作.
$roleName = 'superadmin';
print_r($Role[$roleName]->name);
Run Code Online (Sandbox Code Playgroud)
为什么这个要求来找我,因为对于登录用户它是好的.但是,如果我想知道其他用户角色名称,那么我需要在这里传递索引名称$Role[$roleName]->name
请帮我看看'superadmin'.我没有得到如何得到它的索引名称.
Array ( [superadmin] => yii\rbac\Role Object
^ unable to access this name.
Run Code Online (Sandbox Code Playgroud)
用户可以拥有多个角色,并且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;
}
Run Code Online (Sandbox Code Playgroud)
无需检查数组,因为getRolesByUser已经返回一个数组.
或者,您可以array_shift按照此处的建议使用或返回数组元素的键,因为它是按名称索引的(此处描述).
由于这种索引,您无法获取0数组的元素(它根本就不存在).这就是你得到Undefined offset: 0例外的原因.
视图中的用法示例:
<?php if (!Yii::$app->user->isGuest) { ?>
<div class="user-role"><?= Yii::$app->user->identity->getRoleName() ?></div>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4160 次 |
| 最近记录: |