yii2如何使用getRolesbyUser获取字符串而不是数组

时间:2015-08-07 22:20:40

标签: arrays yii2


$ userRole = yii :: $ app-> authManager-> getRolesByUser($ userId);

得到阵列:

$userRole = Array
(
    [author] => yii\rbac\Role Object
        (
            [type] => 1
            [name] => author
            [description] => 
            [ruleName] => 
            [data] => 
            [createdAt] => 1437713730
            [updatedAt] => 1437713730
        )

)


想得到一个字符串:
$ userRole 的值为'author'

<小时/> 不使用: $ userRole = array_keys(yii :: $ app-&gt; authManager-&gt; getRolesByUser($ userId))[0]

2 个答案:

答案 0 :(得分:1)

getRolesByUser()用于返回所有用户的角色,我们无法强迫它只有一个角色,因为这不是 rbac 的工作方式,如果您需要检查用户是否可以执行某个角色,请使用此代码:

Yii::$app->user->can($role);

否则,如果您确实需要$userRole将角色名称作为字符串值保留(如果用户只有一个角色),并且如果他有更多角色就让我们说一个角色数组,那么这可能是一种更简洁的方式做你要求的:

$userRole = yii::$app->authManager->getRolesByUser($userId);

// if no roles $userRole will be null by default
// so we better be sure that is not the case before doing the next

if ($userRole) {

    foreach ($userRole as $role) {
       $roles[] = $role->name;
    }

    // if user have 1 role then $userRole will be a string containing it
    // othewhise let $userRole be an array containing them all

    $userRole = count($roles) === 1 ? $roles[0] : $roles ;
}

答案 1 :(得分:0)

谢谢!这就是我想要确切知道的: yii2没有方法直接给角色提供角色,,因为一个用户可能有更多的角色。