Как скрыть поля от определеных пользователей GridView?

Я у пользователей в вел правило`canViewsSite`мне надо в случае если у пользователя нет такого разрешения то что бы поля не выводились.
пытался сделать так в представлении

$gridColums=[
            [
                'attribute'=>'key_feild',
                'value'    => function($model){
                    return $model->canViewsKeyFeild($model);
                }
          ],
           [
                'attribute'=>'value',
                'value'    => function($model){
                    return $model->canViewsValue($model);
                },
           ],

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

вот в модели

public function canViewsKeyFeild($model){
            if($model->key_feild=='site'){
                if(Yii::$app->user->can('canViewsSite')){
                    return $model->key_feild;
                }else{
                    return false;
                }
            }else{
                return $model->key_feild;
            }
        }


но тут возникает ошибка поле есть оно просто не заполнено а при редактировании вообще можно зайти и все увидеть. Можно ли как то скрыть поля в случае если у пользователя нет правила`canViewsSite` и значение

keyfeild == 'site'
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
qonand
@qonand
Software Engineer
Если я правильно понял задачу, то у Вас есть таблица в которой есть название поля (key_feild) и его значение (value), Вам соответственно для пользователей у которых нет разрешения canViewsSite нужно скрыть данные с key_field = 'site'

Тогда непонятно зачем это делать на уровне GridView если можно просто выбрать данные по соответствующим условиям из БД. Например так:
MyModel::find()->where(['not' in, 'key_field', 'site']);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы