Метод denyAccessUnlessGranted
Метод denyAccessUnlessGranted принадлежит базовому классу AbstractController и используется для проверки прав доступа текущего пользователя к ресурсу. Если пользователь не обладает требуемыми правами, метод выбрасывает исключение AccessDeniedException, которое Symfony автоматически преобразует в ответ с кодом 403 или перенаправление на страницу входа. Первым параметром передаётся атрибут доступа, вторым - субъект (объект, к которому проверяется доступ), третьим - сообщение об ошибке.
Синтаксис
denyAccessUnlessGranted(attribute, subject: null, message: 'Access Denied.')
Пример
Давайте проверим, что текущий пользователь имеет роль ROLE_ADMIN, и вернём ответ только в случае успеха:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/admin', name: 'article_admin')]
public function admin(): Response
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
return new Response('hello');
}
}
?>
Результат выполнения кода для пользователя с ролью ROLE_ADMIN:
hello
Пример
Давайте передадим субъект доступа, чтобы проверить право на конкретный объект:
<?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
{
$this->denyAccessUnlessGranted('VIEW', $article, 'Access Denied.');
return new Response('article');
}
}
?>
Результат выполнения кода при наличии права VIEW:
"article"
Смотрите также
-
класс
AbstractController,
который предоставляет базовые методы контроллера -
метод
isGranted,
который возвращает результат проверки прав -
метод
getUser,
который возвращает текущего пользователя -
метод
redirectToRoute,
который выполняет перенаправление на маршрут