Привет.
Есть веб-форма с кучей полей (текст, списки, файлы).
Администраторы могут редактировать все 20 полей формы.
Менеджеры - 10 полей, остальные поля - disabled.
Какая-то еще группа - может редактировать 5 полей, остальные поля disabled.
Вопрос 1. Как сделать нужные поля disabled в шаблоне? Такой вариант:
@can ('edit_name')
{!! Form::text('name') !!}
@else
{!! Form::text('name', ['disabled' => 'disabled']) !!}
@endif
выглядит не лучшим решением, т.к. для каждого поля вызывается can. Плюс надо для каждого поля создать разрешение (edit_name, edit_date и т.д.), а их два десятка (а может быть и больше). Можно не создавать разрешения для каждого поля, а опираться на принадлежность пользователя определенной группе, но на шаблон это мало повлияет: останется куча условий.
Вопрос 2. Как перед сохранением результата формы проверить, что менеджер не "подпихнул" значение поля, которое ему редактировать нельзя?
Можно собирать нужные поля в контроллере:
if ($isAdmin) {
$record->name = $request->get('name');
$record->date = $request->get('date');
...
} elseif ($isManager) {
$record->name = $request->get('name');
$record->otherField = $request->get('otherField');
...
}
...
Но это довольно трэшово.
Тут было бы здорово изменить свойство модели $fillable в зависимости от группы пользователя. Но как его изменить?
Как вы реализуете подобные формы?