簡體   English   中英

獲取用戶角色 - 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 通知 – yii\\base\\ErrorException

未定義的偏移量:0

而且,如果我喜歡這種方式(意味着,手動將$rolename傳遞給數組索引)它正在工作。

$roleName = 'superadmin';

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

為什么這個要求來找我,因為對於登錄用戶來說沒關系。 但是,如果我想知道其他用戶角色名稱,那么我需要該索引名稱在這里傳遞$Role[$roleName]->name

請幫助我訪問這個“超級管理員”。 我不知道如何獲取它的索引名稱。

Array ( [superadmin] => yii\rbac\Role Object
               ^ unable to access this 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已經返回一個數組。

或者,您可以按照此處的建議使用array_shift或返回數組元素的鍵,因為它是按名稱索引的( 此處描述)。

由於這種索引,您無法獲得數組的0元素(它根本不存在)。 這就是為什么你得到Undefined offset: 0異常。

視圖中的用法示例:

<?php if (!Yii::$app->user->isGuest) { ?>
    <div class="user-role"><?= Yii::$app->user->identity->getRoleName() ?></div>
<?php } ?>

所以你可以使用這個array_shift 它返回數組的第一個元素,例如:

if(is_array($Role))array_shift($Role)->name;

您的數組沒有0索引。 正如文檔所說,數組由角色名稱索引。

因此,如果您擁有 100% 的所有用戶將始終只有一個角色。 你可以這樣稱呼它:

print_r(reset($Role));

但是如果用戶可以有多個角色,你可以使用一個循環:

foreach ($Role as $each) {
    print_r($each);
}
$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上面的角色“管理員”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM