2012-09-25 10 views
5

Podczas testowania ról w mojej aplikacji znalazłem funkcję isGranted z SecurityContext. Działa świetnie, ale teraz muszę sprawdzić role użytkownika, który nie jest bieżącym użytkownikiem, więc isGranted nie działa dla mnie.Alternatywy dla isGranted w Symfony2

Szukałem i znalazłem funkcję hasRole użytkownika, problem polega na tym, że ta funkcja nie jest wyświetlana w drzewie hierarchii Symfony i wygląda tylko w rolach przypisanych do użytkownika.

A więc czy istnieje funkcja, która wyszukuje rolę użytkownika wyglądającego w drzewie hierarchii, np. isGranted do bieżącego użytkownika?

EDIT

Znalazłem rozwiązanie:

How to use the AccessDecisionManager in Symfony2 for authorization of arbitrary users?

I wdrożone go i działa, problemem jest to, że potrzebuje ContainerBuilder i wolałbym innego podejścia.

Każdy pomysł?

+0

Twoje role powinny być składowane w bazie danych, dzięki czemu można po prostu złożyć wniosek, aby pobrać rola innego użytkownika niż jedna czarownica jest podłączona (przepraszam, nie wiem, czy istnieje metoda, to tylko kolejny pomysł, aby rozwiązać problem) – Snroki

+1

Co to jest przypadek użycia? –

+1

Mam listę użytkowników iw zależności od ról użytkownika działania, które można zastosować różnią się – graffiacane

Odpowiedz

0

Zasadniczo AFAIK SecurityContext współpracuje z Symfony\Component\Security\Core\Authentication\Token\TokenInterface skąd można pobrać bieżącego użytkownika za pomocą metody getUser.

Jeśli żeton użytkownik nie jest uwierzytelniony następnie isGranted próbuje uwierzytelnić użytkownika tokena, a potem użyć klasy o nazwie AccessDecisionManager które zasadniczo iterowaniu wyborców obiektów i nazywają je (i może wykorzystywać różne strategie do tego) Jednym zwanych wyborców jest RoleHierarchyVoter które wykorzystują Symfony\Component\Security\Core\Role\RoleHierarchy .

więc odpowiedzieć na pytanie:

myślę, że nie ma takiej funkcji jak isGranted dla innych użytkowników (lub nie wiedzą o każdy), ale można napisać własne usługi, które pozwalają do korzystania security.role_hierarchy (tylko zauważy to jest usługa prywatna).

BTW hasRole prawdopodobnie powinna być wystarczająca większość czasu, więc może warto pomyśleć o tym, co chcesz zrobić;)

+1

Hi l3l0, funkcja hasRole jest niewystarczająca, ponieważ muszę szukać w drzewie hierarchii. – graffiacane

+0

Witaj, jeśli korzystasz z FOSUserBundle, masz taką metodę, jak getRoles, która powinna zwracać wszystkie role użytkownika: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/User.php#L312 i Model/User :: hasRole też powinien z nim pracować – l3l0

+0

Witam l3L0, może nie wyjaśniam dobrze, ale te funkcje nie zwracają ról, które użytkownik odziedziczył z drzewa hierarchii, tylko te powiązane z użytkownikiem w bazie danych. – graffiacane