Суть вопроса: есть приложение, есть пользователи. Каждый пользователь относится к какой то группе пользователей, эти группы хочу хранить в БД. У каждой группы есть набор прав. Схема не иерархическая, группы абсолютно разные и эти группы (роли) можно менять в админке, то есть давать и забирать какие либо права.
Собственно вопрос - как это сделать в Symfony?
Смотрел в доках, видел что это можно делать в security.yaml, но прав будет довольно много, да и ролей будет неточное множество, может и 10, а может и 20. И каждый раз, когда появляется роль, не хотелось бы лезть в secutiry.yaml чтобы добавлять роли.
Видится что то типа проверки isGranted при запросе какого то роута, и при наличии прав, юзер видит страницу.
drboboev, как вариант сделать через соглашение. Какой-нибудь регуляркой в зависимости от названия роли:
ROLE_NEWS => ^/news
ROLE_ARTICLES => ^/articles
Не знаю на счёт "нормального", но ACL убрали из 4й версии. Ну точнее можно поставить отдельно ACL bundle. А в 4й версии используются voters, но не совсем понятно из документации, как его использовать для моей задачи
Роли (точнее иерархию ролей) вам в любом случае указывать в security.yaml, как и указывать в коде is_granted(ROLE_XXXX). В админке можете добавлять и удалять роли (пара строк sonata admin). Если хотите все это делать через какой-то готовый интерфейс - пилите сами или ищите бандл для этого, где-то такое уже видел.
Роли (точнее иерархию ролей) вам в любом случае указывать в security.yaml
За что люблю Symfony, так за то что там ничего гвоздями не прибито. За иерархию ролей отвечает Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter. Если иерархия динамическая, то достаточно переопределить/написать свой Voter, security.yaml все не ограничивается