Метод isGranted класса Security
Метод isGranted класса Security проверяет,
имеет ли текущий пользователь указанное право доступа.
Первым параметром передаётся атрибут (роль или правило),
вторым - субъект, для которого проверяется право.
Метод возвращает true, если доступ разрешён,
и false в противном случае.
Синтаксис
public function isGranted(mixed $attribute, mixed $subject = null): bool
Пример
Давайте проверим, имеет ли текущий пользователь роль 'ROLE_ADMIN':
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyBundleSecurityBundleSecurity;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Security $security): Response
{
if ($security->isGranted('ROLE_ADMIN')) {
return new Response('admin access');
}
return new Response('access denied');
}
}
?>
Результат выполнения кода для пользователя с ролью 'ROLE_ADMIN':
"admin access"
Пример
Давайте проверим право на редактирование конкретной статьи, передав её вторым параметром:
<?php
namespace AppController;
use AppEntityArticle;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyBundleSecurityBundleSecurity;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_edit')]
public function edit(Article $article, Security $security): Response
{
if ($security->isGranted('EDIT', $article)) {
return new Response('edit allowed');
}
return new Response('edit denied');
}
}
?>
Результат выполнения кода для статьи, которую пользователь может редактировать:
"edit allowed"