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

Атрибут IsGranted

Атрибут IsGranted вешается на метод контроллера и проверяет, имеет ли текущий пользователь указанную роль или право доступа. Первым параметром передаётся роль или право, вторым - субъект для проверки. Если доступ запрещён, Symfony выбрасывает исключение AccessDeniedException.

Синтаксис

#[IsGranted(attribute, subject: subject, message: message)]

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Http\Attribute\IsGranted; class ArticleController extends AbstractController { #[IsGranted('ROLE_ADMIN')] public function index(): Response { return new Response('admin page'); } } ?>

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

"admin page"

Пример

Давайте проверим доступ по праву EDIT к объекту статьи, переданному в качестве субъекта:

<?php namespace App\Controller; use App\Entity\Article; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Http\Attribute\IsGranted; class ArticleController extends AbstractController { #[IsGranted('EDIT', subject: 'article')] public function edit(Article $article): Response { return new Response('article edited'); } } ?>

Если пользователь имеет право EDIT на статью, то результат выполнения кода будет таким:

"article edited"

Пример

Давайте зададим собственное сообщение об ошибке при отказе в доступе:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Http\Attribute\IsGranted; class ArticleController extends AbstractController { #[IsGranted('ROLE_ADMIN', message: 'Access denied for this page')] public function secret(): Response { return new Response('secret data'); } } ?>

Если доступ разрешён, результат выполнения кода:

"secret data"

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

  • метод isGranted,
    который проверяет права доступа программно
  • класс AuthorizationChecker,
    который выполняет проверку прав доступа
  • класс Voter,
    который реализует логику проверки прав
  • класс Security,
    который предоставляет доступ к текущему пользователю
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить