0
votes

How to print user role in Yii 2 GridView widget? I've tried with code:

public function getUserRole($id) { $roles = \Yii::$app->authManager->getRolesByUser($id);

    $role = '';

    foreach($roles as $key => $value)
    {
        $role = $key;
    }

    return $this->role = $role;
}

in User model class but it's not working. Each user has assigned only one role. Many thanks for any help.

2

2 Answers

1
votes

Ok, I got it!

View:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        //'id',
        [
        'label' => 'Nazwa użytkownika',
        'value' => 'username'
        ],
        //'auth_key',
        //'password_hash',
        //'password_reset_token',
        'email:email',
        [
            'label' => 'Rola',
            'value' => 'userRole',
        ],
        // 'status',
        // 'created_at',
        // 'updated_at',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>

Method in User model class:

public function getUserRole()
{
    $roles = \Yii::$app->authManager->getRolesByUser($this->id);

    $role = '';

    foreach($roles as $key => $value)
    {
        $role = $key;
    }

    return $role;
}

And in UserSearch class attribute:

public $userRole;

And

[['userRole'], 'safe'] 

in rules for UserSearch

0
votes
 public static function getFirstRole($userID) {
       $role = array_values(Yii::$app->getAuthManager()->getRolesByUser($userID));
       if (isset($role[0])) {
           $role = $role[0];
       } else {
           $role = Yii::$app->getAuthManager()->getRole('YOUR_DEFAULT_ROLE');
       }

       return $role;
   }