Атрибут CurrentUser
Атрибут CurrentUser вешается на параметр метода
контроллера и автоматически подставляет в него объект
пользователя, который currently авторизован в системе.
Если пользователь не авторизован, Symfony вернёт ошибку
доступа. Атрибут работает совместно с UserInterface
и позволяет получить доступ к данным пользователя без
ручного обращения к TokenStorage.
Синтаксис
#[CurrentUser] UserInterface $user
Пример
Давайте внедрим текущего пользователя в метод контроллера и выведем его идентификатор:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
use Symfony\Component\Security\Core\User\UserInterface;
class UserController extends AbstractController
{
public function index(#[CurrentUser] UserInterface $user): Response
{
return new Response($user->getUserIdentifier());
}
}
?>
Результат выполнения кода для авторизованного пользователя:
"abcde"
Пример
Давайте получим роли текущего пользователя:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
use Symfony\Component\Security\Core\User\UserInterface;
class UserController extends AbstractController
{
public function roles(#[CurrentUser] UserInterface $user): Response
{
$roles = implode(', ', $user->getRoles());
return new Response($roles);
}
}
?>
Результат выполнения кода:
"ROLE_USER, ROLE_ADMIN"
Пример
Давайте проверим, что атрибут возвращает именно объект
UserInterface, и выведем класс пользователя:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
use Symfony\Component\Security\Core\User\UserInterface;
class UserController extends AbstractController
{
public function info(#[CurrentUser] UserInterface $user): Response
{
return new Response(get_class($user));
}
}
?>
Результат выполнения кода:
"App\Entity\User"
Смотрите также
-
класс
Security,
который предоставляет доступ к текущему пользователю -
метод
getUser,
который возвращает текущего пользователя -
интерфейс
UserInterface,
который должны реализовывать классы пользователей -
метод
getUserIdentifier,
который возвращает идентификатор пользователя