Новое в Symfony 5.1: Решение о доступе на основе приоритета избирателей

В приложениях 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, и определяет некоторые разрешения по умолчанию, которые другие расширения/пакеты должны иметь возможность переопределять. Эта новая стратегия принятия решения о приоритетном доступе является единственной способной сделать это.