Метод getRoles
Метод getRoles объявлен в интерфейсе
UserInterface и возвращает массив строк -
список ролей, назначенных пользователю. Каждая
роль должна начинаться с префикса ROLE_
(например, ROLE_ADMIN, ROLE_USER).
Symfony вызывает этот метод при проверке прав
доступа через isGranted и в voter-ах.
Параметров метод не принимает.
Синтаксис
public function getRoles(): array
Пример
Давайте реализуем сущность User,
которая возвращает фиксированный набор ролей:
<?php
namespace AppEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
class User implements UserInterface
{
private string $email;
public function getUserIdentifier(): string
{
return $this->email;
}
public function getRoles(): array
{
return ['ROLE_USER', 'ROLE_ADMIN'];
}
public function eraseCredentials(): void
{
}
}
?>
Результат выполнения метода:
["ROLE_USER", "ROLE_ADMIN"]
Пример
Давайте добавим роль ROLE_ADMIN,
если у пользователя установлен флаг
isAdmin:
<?php
namespace AppEntity;
use SymfonyComponentSecurityCoreUserUserInterface;
class User implements UserInterface
{
private string $email;
private bool $isAdmin = false;
public function getUserIdentifier(): string
{
return $this->email;
}
public function getRoles(): array
{
$roles = ['ROLE_USER'];
if ($this->isAdmin) {
$roles[] = 'ROLE_ADMIN';
}
return $roles;
}
public function eraseCredentials(): void
{
}
}
?>
Результат выполнения метода при isAdmin = false:
["ROLE_USER"]
Пример
Давайте проверим роль через isGranted
в контроллере:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentSecurityHttpAttributeIsGranted;
class UserController extends AbstractController
{
#[Route('/admin', name: 'user_admin')]
#[IsGranted('ROLE_ADMIN')]
public function admin(): Response
{
return new Response('hello');
}
}
?>
Результат выполнения кода для пользователя
с ролью ROLE_ADMIN:
hello
Смотрите также
-
интерфейс
UserInterface,
который описывает контракт пользователя -
метод
getUserIdentifier,
который возвращает идентификатор пользователя -
метод
eraseCredentials,
который очищает чувствительные данные -
атрибут
IsGranted,
который проверяет доступ к методу контроллера