当前位置:  开发笔记 > 编程语言 > 正文

获得用户的角色 - Yii2

如何解决《获得用户的角色-Yii2》经验,为你挑选了1个好方法。

我正在为登录用户搜索用户角色,我没有得到如何打印用户角色名称.我试过这个:

$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注意 - yii\base\ErrorException

未定义的偏移量:0

并且,如果我喜欢这种方式(意味着,手动传递$rolename给数组索引)它正在工作.

$roleName = 'superadmin';

print_r($Role[$roleName]->name);

为什么这个要求来找我,因为对于登录用户它是好的.但是,如果我想知道其他用户角色名称,那么我需要在这里传递索引名称$Role[$roleName]->name

请帮我看看'superadmin'.我没有得到如何得到它的索引名称.

Array ( [superadmin] => yii\rbac\Role Object
               ^ unable to access this name.

我还检查了获取用户角色和用户的特定角色



1> arogachev..:

用户可以拥有多个角色,并且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已经返回一个数组.

或者,您可以array_shift按照此处的建议使用或返回数组元素的键,因为它是按名称索引的(此处描述).

由于这种索引,您无法获取0数组的元素(它根本就不存在).这就是你得到Undefined offset: 0例外的原因.

视图中的用法示例:

user->isGuest) { ?>
    
user->identity->getRoleName() ?>


嗨Arogachev先生:你的代码工作得很好.非常感谢.正如@Nuriddin先生所建议的那样,我正在使用array_shift.但是,我也会用它.谢谢 :)
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有