Динамическое изменение стратегии голосования Symfony

С системой Symfony Voters довольно легко настроить и запустить хороший ACL для веб-приложения. Тем не менее, вы должны решить в начале, какую стратегию вы хотели бы использовать.

Symfony поддерживает 3 стратегии: affirmative, consensus и unanimous (см. их документация)

affirmative (по умолчанию): это предоставляет доступ, как только есть один избиратель, предоставляющий доступ;
consensus: это предоставляет доступ, если больше избирателей предоставляют доступ, чем запрещают;
unanimous: это предоставляет доступ только после того, как все избиратели предоставляют доступ .

В настоящее время я использую стратегию affirmative. В одном особом случае (пока что, возможно, в будущем их будет больше) мне нужно использовать стратегию unanimous.

Есть ли способ сделать это или мне просто нужно сделать там собственную систему проверки (скопировать код всех задействованных избирателей)?


person wawa    schedule 02.07.2016    source источник


Ответы (1)


Вы пытались расширить Symfony AccessDecisionManager своим собственным классом с собственной стратегией и зарегистрировать его в сервисном контейнере? Вы можете проверить реализацию этого класса и увидеть, что вы можете определить свою собственную стратегию, создав простой метод внутри класса.

Другой вариант: вы можете попробовать использовать access_control и allow_if, как указано здесь.

person Andrey Mischenko    schedule 02.07.2016
comment
Будет ли это означать наличие собственного AccessDecisionManager с собственной стратегией, который затем будет зарегистрирован как главный менеджер и там будет что-то вроде того, если это избиратель foobar, затем проверьте все следующее, в противном случае просто проверьте до первого совпадения или до конца ? - person wawa; 03.07.2016
comment
Да, что-то вроде этого. Любая логика внутри вашей пользовательской стратегии. - person Andrey Mischenko; 03.07.2016