Как организовать вывод и сохранение формы для разных групп пользователей?

Привет.

Есть веб-форма с кучей полей (текст, списки, файлы).

Администраторы могут редактировать все 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 в зависимости от группы пользователя. Но как его изменить?

Как вы реализуете подобные формы?
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
1 Для отображения форм можно создать компаонент в который передавать массив кто его видит (менеджер, администратор и т.д.) или не видят, это решай в зависимости от того, где больше писать
2 Я юзаю $request->only(['username', 'password']); соответственно каждая группа будет иметь свой массив разрешенных полей
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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