Как установить ограничени на количество записей для произвольной категории?
Добрый день!
Исходные данные стандартные: есть модель aNewModel c полями id, user_id, content и контроллер aNewController. В контролере есть есть метод создания новой записи create.
Есть два вопроса: 1) Где и как лучше устанавливать количественные ограничения на создание новых записей (для одного пользователя) - в контроллере в методе store или использовать middleware, или есть другие способы . Что порекомендуете ?
Таких контролеров - около 10.
2) Где и как сделать ограничение на количество новых записей в единицу времени (например, в секунду) ?
Вопрос связан с необходимостью защиты от программ-автоматизаторов и ботов.
1. Вероятно сразу после или вовремя проверки прав пользователя.
2. Для ограничений количества запросов от пользователя в единицу времени по определенному маршруту есть https://laravel.com/docs/routing#rate-limiting
По первому ответу - не понятен момент. Т.е. делаем в методе store до валидации.
Логика должна быть такая: любой авторизованный пользователь имеет возможность создавать записи определенного типа. Маршрут на создание новой записи - открытый для авторизлванных пользователей.
Проблема в том, что пользователь может запустить бота с авторизованными данными и заспамить БД. Хочу установить ограничение на количество записей для одного пользователя. Скажем, не более 5.
Пока вижу, что-то типа этого
public function store(Request $request)
{
$form = Form::findorFail($request->get('form_id'));
if ((count($form->relatedRecords) > 5)
{
return redirect()->back()->withErrors('Установлено ограничение для этого вида записей - 5');
}
...
}
Люций Мунинг, в ларе есть несколько узлов где может происходить проверка прав (например весьма логичное место это https://laravel.com/docs/authorization#creating-po... ) и вы можете использовать любой, какой по вашему мнению удобнее и правильнее. Судя по задаче, в случае если практика покажет не оптимальность решения, то большого труда переделать не составит.