Laravel: Form Request и Policy
Валидируйте вход и отдельно проверяйте право на объект. В модель передавайте только разрешённые поля.
Плохо
$order->update($request->all());
Хорошо
// Контроллер: UpdateOrderRequest проверяет title
Gate::authorize('update', $order);
$order->update($request->safe()->only(['title']));
Почему это важно
Проверка формата не даёт права редактировать чужой заказ. Поля вроде owner_id нельзя принимать из произвольного тела запроса.
Когда применять
Laravel 12.x, Form Request и зарегистрированная Policy; в модели настроен $fillable. Входящий DTO не заменяет объектную авторизацию.
Кто что делает
Человек
Определяет права ролей и редактируемые поля заказа.
AI-агент
Создаёт Form Request, Policy и тесты запрещённых полей/чужих объектов.
Пример применения
В кабинете клиент меняет название своего заказа. UpdateOrderRequest проверяет строку title, Policy сопоставляет владельца с текущим пользователем, контроллер записывает только title.
Как проверить у себя
- Чужой заказ даёт отказ.
- Лишние owner_id и is_paid не меняют запись.
Первоисточники
История изменений на GitHubДата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.