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

Исключение AccessDeniedException

Исключение AccessDeniedException выбрасывается, когда пользователь не имеет прав на выполнение определённого действия или доступ к защищённому ресурсу. Оно входит в состав компонента Symfony\Component\Security\Core\Exception и является частью системы безопасности Symfony. Чаще всего это исключение возникает при проверке прав через denyAccessUnlessGranted, isGranted или при срабатывании voter.

Первым параметром конструктор принимает текст сообщения об ошибке. Вторым - предыдущее исключение. Внутри хранится объект TokenInterface, если исключение было создано в контексте аутентификации.

Синтаксис

new AccessDeniedException(string $message = '', ?Throwable $previous = null)

Пример

Давайте выбросим исключение AccessDeniedException в контроллере, если пользователь не авторизован:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Core\Exception\AccessDeniedException; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { if (!$this->getUser()) { throw new AccessDeniedException('Access denied for guest user.'); } return new Response('hello'); } } ?>

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

"Access denied for guest user."

Пример

Давайте воспользуемся методом denyAccessUnlessGranted, который автоматически выбрасывает AccessDeniedException при отсутствии прав:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/edit', name: 'article_edit')] public function edit(): Response { $this->denyAccessUnlessGranted('ROLE_ADMIN'); return new Response('article'); } } ?>

Результат выполнения кода для пользователя без роли ROLE_ADMIN:

"Access Denied."

Пример

Давайте перехватим исключение AccessDeniedException и вернём собственный ответ:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Core\Exception\AccessDeniedException; class ArticleController extends AbstractController { #[Route('/article/secure', name: 'article_secure')] public function secure(): Response { try { $this->denyAccessUnlessGranted('ROLE_USER'); } catch (AccessDeniedException $e) { return new Response($e->getMessage()); } return new Response('hello'); } } ?>

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

"Access Denied."

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

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