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

Метод isGranted

Метод isGranted проверяет, обладает ли текущий пользователь указанным разрешением или ролью. Первым параметром передаётся проверяемое разрешение в виде строки, например 'ROLE_ADMIN' или 'ROLE_USER'. Вторым необязательным параметром можно передать субъект, для которого проверяется разрешение. Метод возвращает true, если доступ разрешён, и false в противном случае.

Метод вызывается внутри контроллера, унаследованного от AbstractController. Если пользователь не авторизован, метод также возвращает false, а не выбрасывает исключение.

Синтаксис

isGranted(string $attribute, mixed $subject = null): bool

Пример

Давайте проверим, есть ли у текущего пользователя роль 'ROLE_ADMIN', и вернём соответствующий ответ:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(): Response { if ($this->isGranted('ROLE_ADMIN')) { return new Response('admin access'); } return new Response('user access'); } } ?>

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

"admin access"

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

"user access"

Пример

Давайте используем метод isGranted совместно с denyAccessUnlessGranted для ограничения доступа к действию контроллера:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/edit', name: 'article_edit')] public function edit(): Response { if (!$this->isGranted('ROLE_EDITOR')) { throw $this->createAccessDeniedException('Access denied'); } return new Response('article edited'); } } ?>

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

"article edited"

Пример

Давайте проверим разрешение для конкретного субъекта, передав его вторым параметром:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show')] public function show(Article $article): Response { if ($this->isGranted('ARTICLE_VIEW', $article)) { return new Response('article visible'); } return new Response('article hidden'); } } ?>

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

"article visible"

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

  • класс AbstractController,
    который предоставляет метод isGranted
  • метод denyAccessUnlessGranted,
    который выбрасывает исключение при отсутствии доступа
  • метод getUser,
    который возвращает текущего пользователя
  • метод redirectToRoute,
    который выполняет редирект на маршрут
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить