@DeOne
Программист

Yii2: как запретить изменять некоторые поля?

Как можно запретить смену роли в yii2 для обычных юзеров?
Смена происходит таким образом:

$model = $this->findModel($id);
        if ($model->load(Yii::$app->request->post())) {
            if (!$model->validate()) {
                ....
            }            
            if ($model->save()) ....
        }
  • Вопрос задан
  • 2044 просмотра
Решения вопроса 1
restyler
@restyler
Вводишь в использование сценарии - ADMIN_PROFILE_UPDATE и USER_PROFILE_UPDATE, текущий сценарий проставляешь в контроллере сделав там проверку прав залогиненого юзера. потом в модели реализуешь метод scenarios() в котором в сценарии USER_PROFILE_UPDATE НЕ указываешь поле роли (потому что ее не надо апдейтить).
Ну и во view надо будет обернуть рендеринг элемента формы в условие
<?php if ($model->scenario == ADMIN_PROFILE_UPDATE): ?>
<?= $form->render($model, 'roles') ?>
<?php endif; ?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@jamalMixCart
public function rules(): array
    {
        return [
            [['contact_email'], 'string', 'max' => 255],

            [['contact_email'], 'email'],

            [['contact_email'], 'editNotEmail', 'on' => self::EXPERT_UPDATE]
        ];
    }

    public function editNotEmail($attribute, $params)
    {
        if ($this->scenario === self::EXPERT_UPDATE) {
            if ($this->oldAttributes['contact_email'] !== $this->contact_email) {
                $this->addError($attribute, 'Невозможно изменять: ' . $attribute);
            }
        }
    }

Сделал так, надеюсь поможет!)
Ответ написан
Комментировать
@lavrentiev
Back-end разработчик
Просто не описывай эти поля при выполнение операции и все!
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы