Метод supports
Метод supports класса Voter используется в системе авторизации Symfony. Он определяет, должен ли данный Voter принимать участие в голосовании за конкретный атрибут (например, роль или право) и субъект (например, объект статьи или пользователя). Если метод возвращает true, то Symfony вызывает метод voteOnAttribute для принятия решения о доступе. Если false - Voter игнорируется. Первым параметром передаётся атрибут, вторым - субъект.
Синтаксис
protected function supports(string $attribute, mixed $subject): bool
Пример
Давайте создадим Voter, который поддерживает только атрибут EDIT и субъекты типа Article:
<?php
namespace AppSecurity;
use AppEntityArticle;
use SymfonyComponentSecurityCoreAuthorizationVoterVoter;
use SymfonyComponentSecurityCoreAuthorizationVoterVote;
class ArticleVoter extends Voter
{
public const EDIT = 'EDIT';
protected function supports(string $attribute, mixed $subject): bool
{
if ($attribute !== self::EDIT) {
return false;
}
if (!$subject instanceof Article) {
return false;
}
return true;
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
{
// logic
return true;
}
}
?>
Результат выполнения метода supports для атрибута EDIT и объекта Article:
true
Пример
Давайте проверим, что Voter возвращает false, если атрибут не совпадает:
<?php
namespace AppSecurity;
use AppEntityArticle;
use SymfonyComponentSecurityCoreAuthorizationVoterVoter;
class ArticleVoter extends Voter
{
public const EDIT = 'EDIT';
protected function supports(string $attribute, mixed $subject): bool
{
return $attribute === self::EDIT && $subject instanceof Article;
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
{
// logic
return true;
}
}
?>
Результат выполнения метода supports для атрибута DELETE:
false
Смотрите также
-
класс
Voter,
который является базовым для создания правил авторизации -
метод
voteOnAttribute,
который принимает решение о доступе -
метод
vote,
который запускает голосование -
атрибут
IsGranted,
который проверяет права доступа в контроллере