【问题标题】:yii2 how to get a string instead of a array with getRolesbyUseryii2如何使用getRolesbyUser获取字符串而不是数组
【发布时间】:2015-08-07 22:20:40
【问题描述】:

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

得到数组:

$userRole = 数组 ( [作者] => yii\rbac\Role 对象 ( [类型] => 1 [名称] => 作者 [描述] => [规则名称] => [数据] => [创建时间] => 1437713730 [更新时间] => 1437713730 ) )


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


不使用: $userRole = array_keys(yii::$app->authManager->getRolesByUser($userId))[0]

【问题讨论】:

  • 如果用户拥有多个角色怎么办?它是关于解析数组还是关于弄清楚如何直接获取角色名称而不是数组?

标签: arrays yii2


【解决方案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 ;
}

【讨论】:

    【解决方案2】:

    谢谢!这正是我想知道的:yii2 没有办法直接将角色返回 als 字符串, 因为一个用户可能有更多角色。

    【讨论】:

    • stackOverFlow 不是这样工作的,您只是为问题添加了一个新答案,当您为问题提供不同的解决方案时,您会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2019-04-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多