Здравствуйте. Появился такой вопрос: как защитить поля от редактирования на уровне модели? То есть, например, поле username - можно добавить пользователю при регистрации, но нельзя изменить при редактировании профиля.
В данный момент реализовал защиту внутри контроллера, отвечающего за сохранение внесенных изменений - массив имен запрещенных к редактированию полей и вызов ошибки, если одно из полей попадает в этот массив. Возможно, это неверный способ, и делать такое надо, все же, на уровне модели?
Станислав Почепко: Как я понял, guadred - это для запрета массового заполнения. А у меня значения полям устанавливаются по отдельности. Хорошо бы иметь свойство, запрещающее именно редактирование поля - когда оно может быть установлено только при создании новой записи...
photosho: Так не выводите пользователю это поле для редактирования и в контроллере не устанавливаете значение поля (по отдельности ,как вы сказали). Что-то я не пойму, что вам надо.
Станислав Почепко: Я понял основную идею, спасибо. Все поля заполняем массово, через метод "fill", а те, которые нужно защитить от изменения таким образом, - добавляем в "guarded". В итоге, доступ к этим полям останется через их свойства, а от взлома они будут защищены при помощи вызова метода "fill" для их заполнения.
photosho: Крайне мала, но я не могу понять, зачем вы предоставляете возможность редактирования username, если хотите защитить его. И если хотите, то с помощью Request вы сможете вывести сообщение об ошибке. Что была попытка взлома или еще что-то
Вы можете создать мутатор setUsernameAttribute и в там делать проверку на существование записи, бросая исключение в случае ошибки, так у вас модель всегда будет в валидном состоянии.