Метод isGranted класса AuthorizationChecker
Метод isGranted класса AuthorizationChecker проверяет, обладает ли текущий пользователь определенными правами доступа. Первым параметром передается атрибут (обычно роль, например ROLE_ADMIN), вторым - субъект (объект, к которому проверяется доступ). Метод возвращает true, если доступ разрешен, и false в противном случае.
Синтаксис
public function isGranted(mixed $attribute, mixed $subject = null): bool
Пример
Давайте проверим, имеет ли текущий пользователь роль администратора:
<?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\Authorization\AuthorizationCheckerInterface;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(AuthorizationCheckerInterface $authChecker): Response
{
if ($authChecker->isGranted('ROLE_ADMIN')) {
return new Response('admin access');
}
return new Response('user access');
}
}
?>
Результат выполнения кода для пользователя с ролью ROLE_ADMIN:
"admin access"
Пример
Давайте проверим доступ к конкретному объекту, используя субъект:
<?php
namespace App\Controller;
use App\Entity\Article;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show')]
public function show(Article $article, AuthorizationCheckerInterface $authChecker): Response
{
if ($authChecker->isGranted('EDIT', $article)) {
return new Response('edit allowed');
}
return new Response('edit denied');
}
}
?>
Результат выполнения кода, если пользователь может редактировать статью:
"edit allowed"
Смотрите также
-
класс
AuthorizationChecker,
который проверяет права доступа пользователя -
класс
Security,
который предоставляет удобный доступ к сервисам безопасности -
метод
getUser,
который возвращает текущего пользователя -
атрибут
IsGranted,
который проверяет права доступа на уровне контроллера