Как лучше всего в Symfony организовать авторизацию вида User -> Roles -> Permissions?
Всем привет.
В планах стоит переписывание CRM с очень плохим кодом.
Писаться будет на симфони, самый каверзный для меня вопрос - это авторизация.
Требования такие:
- юзер не может сам зарегистрироваться или сменить пароль (создает/меняет только суперадмин, или админ для конкретной группы ролей)
- очень желательна наследуемость ролей (что-то из серии: суперадмин наследует абсолютно все пермишны всех ролей, админ какой-то группы наследует пермишны этой группы + некоторые дополнительные присваиваются уже ему)
- все юзеры, роли и пермишны естественно лежат в базе
- возможность настройки принадлежности юзеров к ролям, и ролей к пермишном админами в рамках своих подчиненных групп ролей
- под большим вопросом, но все-таки рассматривается динамическое создание пермишнов при создании нового раздела/страницы
Стоит ли исользовать FOSUserBundle, на первый взгляд для моей задачи он весьма избыточен?
То же касается и стандартной ACL - насколько я понял, из коробки она работает только с токенами, а это ведет за собой декартово произведение половины юзеров/ролей с половиной пермишнов, что намного усложняет и без того не простую логику.
Если можно, отвечайте развернуто, обосновано и основываясь на личном опыте.
Спасибо :)
Сергей Протько правильно ли я понял - FOSUserBundle лучше не использовать в данном контексте, и ACL тоже избыточна?
Читал о voter'ах, но думал, что есть обкатанные решения с минимумом своего кода для таких ситуаций
1) я не использую FosUserBundle потому что на моих проектах от него пользы меньше чем проблем. Уже год подумываю запилить альтернативу
2) ACL не избыточна а скорее недостаточно гибкая. Если вы можете все правила описать в виде иерархии ролей - то этого будет достаточно.
3) ACL в Symfony использует воутеры, просто если вам не достаточно статичной иерархии ролей, и есть более сложные правила - то лучше использовать воутеры (можно вместе с ACL).
Сергей Протько: извиняюсь за назойливость, просто Security - это единственный раздел в доке symfony, который понимается довольно тяжело для меня, если у меня абсолютно все методы должны требовать какой-то уровень доступа - мне все равно нужно на каждый чих генерить токен?