Вопрос проверяет понимание middleware, контроля доступа и корректной обработки запретов в HTTP-приложении
Да, в Laravel проверку роли или прав доступа можно делать прямо в middleware. Middleware выполняется до контроллера и может прервать запрос, если пользователь не имеет нужных прав. При запрете обычно возвращают HTTP-ответ с кодом 403 Forbidden или делают редирект. Такой подход позволяет централизовать логику доступа и не дублировать её в каждом контроллере.
Middleware в Laravel предназначены для фильтрации HTTP-запросов и отлично подходят для проверки прав доступа.
Определение: Middleware — это слой, который обрабатывает HTTP-запрос до или после выполнения контроллера.
Перед началом стоит отметить, что middleware лучше использовать для общих правил доступа, а не для сложной бизнес-логики.
class CheckRole
{
public function handle($request, \Closure $next, string $role)
{
if (!$request->user() || !$request->user()->hasRole($role)) {
abort(403);
}
return $next($request);
}
}
Route::get('/admin', function () {
// ...
})->middleware('role:admin');
abort(403) — стандартный вариант для API и backend-части
JSON с ошибкой и кодом 403 — для API
redirect()->route('login') — если пользователь не авторизован
redirect()->back() — в простых web-сценариях
Логика доступа централизована
Контроллеры остаются “чистыми”
Поведение едино для всех маршрутов
Проверку ролей и прав доступа на уровне middleware использовать можно и нужно, если правило общее для маршрута или группы маршрутов, а при запрете корректно возвращать 403 Forbidden или редирект в зависимости от типа приложения.