Symfony2 FOSUserBundle Ролевые сущности

В настоящее время я пытаюсь выяснить, как лучше всего реализовать сохраненные в доктрине сущности Role как отношения M2M, совместимые с FOSUserBundle. Раньше я использовал только строки с реализацией по умолчанию и сохранял их с сопоставлением массива доктрины.

Теперь мне нужно иметь отдельные роли, поскольку мы хотим создать серверную часть администратора, где другие могут предоставлять роли пользователям.

По сути, это заноза в заднице. Интерфейсы FOS созданы для строковых представлений, а не для сущностей ролей. Измените реализацию, вы сломаете много вещей, например, команды FOS для продвижения пользователей. И трудно понять, какие именно части интерфейсов необходимы, чтобы система безопасности symfony2 могла продолжать работать правильно.

Я мог бы переписать код управления ролями и максимально использовать сущности ролей, например:

$user->addRole(new Role('ROLE_FOO'));

Но это нарушает команды и, возможно, существующий код?

Или продолжайте использовать:

$user->addRole('ROLE_FOO');

И пара кода менеджера роли / объекта в addRole() (плохой дизайн).

Я заметил, что это серая область (сущности ролей с FOS), и она упоминалась на досках symfony2 и здесь, но достойных решений нет.

Кто-нибудь имел опыт или может придумать достойное решение?


person jmoz    schedule 05.12.2011    source источник
comment
Если команды используют интерфейс объекта для установки этих значений, достаточно просто переопределить вызовы getRoles () и setRoles () для сохранения старого поведения.   -  person Louis-Philippe Huberdeau    schedule 05.12.2011
comment
Команды используют addRole (строка), поэтому тогда будет смесь строк и сущностей (не в восторге). А также setRoles (array) - еще одна проблема, поскольку тип интерфейса указывает на массив, а не на коллекцию массивов. Мог бы обойти команды, написав свои собственные.   -  person jmoz    schedule 05.12.2011
comment
Возможно, вы могли бы реализовать __toString в сущности Role и вилку FOSUserBundle для преобразования в строку, когда это необходимо ...   -  person greg0ire    schedule 06.12.2011


Ответы (1)


Я решил использовать комбинацию реализации массива / ArrayCollection. Я старался максимально следовать существующим интерфейсам, чтобы не нарушить систему безопасности. Я задокументировал свое решение на странице http://blog.jmoz.co.uk/symfony2-fosuserbundle-role-entities

person jmoz    schedule 13.12.2011