Класс Security
Класс Security - это сервис Symfony, который объединяет в себе функции TokenStorage и AuthorizationChecker. Он позволяет получить текущего пользователя, проверить его роли и получить токен аутентификации. Внедряется в контроллеры и сервисы через аргумент Security $security.
Синтаксис
use SymfonyBundleSecurityBundleSecurity;
public function index(Security $security): Response
{
// ...
}
Пример
Давайте получим текущего пользователя и выведем его идентификатор:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyBundleSecurityBundleSecurity;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Security $security): Response
{
$user = $security->getUser();
if ($user === null) {
return new Response('user');
}
return new Response($user->getUserIdentifier());
}
}
?>
Результат выполнения кода для авторизованного пользователя:
abcde
Пример
Давайте проверим, имеет ли пользователь роль ROLE_ADMIN:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyBundleSecurityBundleSecurity;
class ArticleController extends AbstractController
{
#[Route('/admin', name: 'article_admin')]
public function admin(Security $security): Response
{
if ($security->isGranted('ROLE_ADMIN')) {
return new Response('hello');
}
return new Response('user');
}
}
?>
Результат выполнения кода для администратора:
hello
Пример
Давайте получим объект токена и имя текущего файрвола:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyBundleSecurityBundleSecurity;
class ArticleController extends AbstractController
{
#[Route('/token', name: 'article_token')]
public function token(Security $security): Response
{
$token = $security->getToken();
$firewall = $security->getFirewallConfig($token);
return new Response($firewall->getName());
}
}
?>
Результат выполнения кода:
main
Смотрите также
-
метод
getUser,
который возвращает текущего пользователя -
метод
isGranted,
который проверяет наличие прав у пользователя -
метод
getToken,
который возвращает объект токена аутентификации -
класс
AuthorizationChecker,
который лежит в основе проверки прав