Symfony2 FOSUserBundle Ролеви обекти

В момента се опитвам да разбера най-добрия начин за прилагане на доктринни постоянни ролеви обекти като 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(string), така че тогава ще има смесица от низове и обекти (не се интересуват). И също така 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