РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
676 of 1392 menu

AccessDeniedHttpException

Исключение AccessDeniedHttpException относится к группе HTTP-исключений и выбрасывается при попытке доступа к защищённому ресурсу без соответствующих прав. Это исключение автоматически преобразуется в HTTP-ответ с кодом 403. Оно часто используется в связке с политиками авторизации Laravel и методом authorize. В контроллерах это исключение выбрасывается, когда пользователь не прошёл проверку прав доступа.

Синтаксис

<?php use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; throw new AccessDeniedHttpException($message); ?>

Параметр $message - это строка с сообщением об ошибке. Сообщение опционально и будет отображаться на странице ошибки.

Пример

Давайте создадим контроллер, который проверяет права пользователя на редактирование статьи:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; class ArticleController extends Controller { public function edit(Request $request, $id) { $article = Article::findOrFail($id); if ($article->user_id !== $request->user()->id) { throw new AccessDeniedHttpException('You do not have permission to edit this article.'); } return view('articles.edit', ['article' => $article]); } } ?>

Результат выполнения кода при попытке редактирования чужой статьи:

HTTP 403 Forbidden You do not have permission to edit this article.

Пример

Использование исключения совместно с методом authorize и политиками авторизации:

<?php namespace App\Http\Controllers; use App\Models\Post; use Illuminate\Http\Request; class PostController extends Controller { public function update(Request $request, $id) { $post = Post::findOrFail($id); $this->authorize('update', $post); $post->update($request->all()); return redirect()->route('posts.index'); } } ?>

Результат выполнения кода, когда политика возвращает false:

HTTP 403 Forbidden This action is unauthorized.

Метод authorize автоматически выбрасывает исключение AccessDeniedHttpException при неудачной проверке прав.

Пример

Обработка исключения в пользовательском обработчике ошибок для кастомизации ответа:

<?php namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Throwable; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { if ($exception instanceof AccessDeniedHttpException) { return response()->json([ 'error' => 'Access denied', 'message' => $exception->getMessage() ], 403); } return parent::render($request, $exception); } } ?>

Результат выполнения кода при обращении к API с недостаточными правами:

{"error":"Access denied","message":"You do not have permission to edit this article."}

Этот подход позволяет возвращать структурированные JSON-ответы для API-приложений вместо стандартной HTML-страницы ошибки.

Смотрите также

  • исключение HttpException,
    базовое HTTP-исключение для всех ошибок
  • исключение NotFoundHttpException,
    выбрасывается при отсутствии ресурса
  • исключение AuthorizationException,
    используется в политиках авторизации
  • исключение MethodNotAllowedHttpException,
    возникает при недопустимом HTTP-методе
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить