В приложениях Symfony Voters безопасности централизуют логику авторизации, которая решает, может ли данный пользователь получить доступ к запрошенному ресурсу. Это обычные службы Symfony, помеченные тегом security.voter
, поэтому они могут определять свои приоритеты с помощью атрибута priority
тега.
На практике этот приоритет Voter в основном не имеет значения из-за стратегий решения о доступе, используемых Symfony:
- утвердительный – предоставляет доступ, как только один Voter предоставляет доступ;
- согласие – предоставляет доступ, если число Voter, предоставляющих доступ, превышает число отказавших;
- единогласно – предоставляет доступ, если нет Voter, отказывающих в доступе.
Вот почему в Symfony 5.1 добавили новую стратегию принятия решения о доступе, называемую приоритетом, которая предоставляет или запрещает доступ в зависимости от первого Voter, который не воздерживается. В этом случае приоритет избирателя является существенным, потому что первое не воздержавшееся решение будет окончательным:
# config/packages/security.yaml
security:
access_decision_manager:
strategy: priority
# ...
Эта функция возникла из проекта Contao CMS, созданного с помощью Symfony, и определяет некоторые разрешения по умолчанию, которые другие расширения/пакеты должны иметь возможность переопределять. Эта новая стратегия принятия решения о приоритетном доступе является единственной способной сделать это.