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

この「スーパー管理者」にアクセスするのを手伝ってください。インデックス名を取得する方法がわかりません。

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

ユーザーロールの取得とユーザーの特定のロールもチェックしました

4

5 に答える 5

6

ユーザーは複数のロールを持つことができますが、authManagerユーザーのロールを 1 つだけ取得する方法はありません。

このコードは、1 つのロールの場合に使用できます (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 } ?>
于 2015-12-09T08:09:03.617 に答える
1

配列にインデックスがありません0ドキュメントにあるように、配列はロール名によってインデックス付けされています。

したがって、100% の場合、すべてのユーザーが常に 1 つのロールしか持たないことになります。次のように呼び出すことができます。

print_r(reset($Role));

ただし、ユーザーが複数の役割を持つことができる場合は、そのためにループを使用できます。

foreach ($Role as $each) {
    print_r($each);
}
于 2015-12-08T16:32:06.363 に答える