2013-06-12 12 views
6

Chcę wiedzieć, czy użytkownik ma rolę "VIEW_GEOLOC_DATA", ale mam problem z wykorzystaniem funkcji gałązki is_granted().Twig/Symfony2: wielokrotności ról z is_granted

Jeśli używam w szablonie:

Roles : {{ dump(app.user.getRoles()) }} 
is_granted('ROLE_SUPER_ADMIN') : {{ dump(is_granted('ROLE_SUPER_ADMIN')) }} 
is_granted('VIEW_GEOLOC_DATA') : {{ dump(is_granted('VIEW_GEOLOC_DATA')) }} 

To co mam przy renderowaniu:

array(2) { 
    [0]=> 
    string(16) "ROLE_SUPER_ADMIN" 
    [1]=> 
    string(16) "VIEW_GEOLOC_DATA" 
} 
is_granted('ROLE_SUPER_ADMIN') : bool(true) 
is_granted('VIEW_GEOLOC_DATA') : bool(false) 

Próbowałem zalogowaniu i na zewnątrz, opróżniania pamięci podręcznej Symfony za.
Próbowałem również zmienić kolejność ról w tablicy zwróconej przez getRoles() metoda mojego Użytkownik: funkcja is_granted weźmie pod uwagę tylko pierwszy rolę tablicy

Odpowiedz

8

skończyło się tworząc nową metodę hasRole w moim User klasy:

public function hasRole($role) 
{ 
    return in_array($role, $this->getRoles()); 
} 

Następnie w szablonie, używam:

{% if app.user.hasRole('ROLE_VIEW_GEOLOC_DATA') %} 
    {# do something #} 
{% endif %} 

EDIT: Jako @ JonnyS powiedział, może być możliwe, że role muszą zaczynać się od ROLE_ do pracy z is_granted Funkcja Symfony. Nie testowałem.

+6

dla jasności może bezpośrednio zwrócić wynik in_array, zamiast dodawać if/else: 'return in_array ($ rola, $ this-> getRoles());' –

+1

To nie to samo, co isgranted kont dziedziczenia ROLE , natomiast samo sprawdzenie, czy użytkownik ma określoną rolę, nie działa – Gamesh

8

Jeśli spodziewasz Symfony2 do obsługi twoje role, wtedy twoje role zaczynają się od "ROLE_".

Zmień

'VIEW_GEOLOC_DATA' 

do

'ROLE_VIEW_GEOLOC_DATA' 

Oczywiście, trzeba to zmienić w swoim config i dodać nową rolę.

Ta odpowiedź nie ma zastosowania, jeśli używana jest dedykowana klasa ról.

+0

nie używam klasę rolę, to jest moja definicja getRoles(): getRoles 'public function() { if ($ this-> rola == 100) return array ('ROLE_SUPER_ADMIN' "VIEW_GEOLOC_DATA"); } ' Ale zachowanie jest takie samo jak [Zarządzanie rolami w bazie danych] (http://symfony.com/doc/2.1/cookbook/security/entity_provider.html#managing-roles-in-the-database) –

+2

Spróbuj zmienić to ustawienie, aby użyć prefiksu "ROLE_". Symfony 2 nie lubi ról bez prefiksu. Z dokumentów "Wszystkie role muszą rozpoczynać się od prefiksu ROLE_, który będzie zarządzany przez Symfony2." http://symfony.com/doc/2.1/book/security.html Powodzenia i daj mi znać, jeśli to działa. – JonnyS

+0

Nic nie zmienia –

Powiązane problemy