2013-10-18 12 views
22

Hallo Ich möchte in der Lage sein, den Zugriff auf einen Pfad in security.yml basierend auf dem Benutzer entweder ROLE_TEACHER oder ROLE_ADMIN zu ermöglichen.Symfony gewährt Pfad Zugriff auf mehrere Rollen in security.yml

Entsprechend der Frage in Multiple roles required for same url in symfony 2 sollte der folgende Eintrag beide Rollenzugriff erlauben.

- { path: ^/admin, roles: ROLE_ADMIN} 
- { path: ^/admin, roles: ROLE_TEACHER} 

Dies wird jedoch nur die oberste Rolle Zugriff ermöglichen. Gibt es eine Möglichkeit, mehrere Rollen auf einen einzelnen Pfad zuzugreifen?

+0

Die Ersetzung der Reihenfolge von Entitäten führt nur dazu, dass eine der Rollen funktioniert. Jede der beiden folgenden Antworten erlaubt die Verwendung mehrerer Rollen. – nmcilree

+0

Mehrere Einträge mit demselben Muster würden nicht funktionieren. Der erste übereinstimmende Eintrag hat Priorität. –

Antwort

64

Dies ist der Weg zu gehen und was ich verwende:

role_hierarchy: 
    ROLE_ADMIN: [ROLE_TEACHER] 

#... 

access_control: 
    - { path: ^/admin, roles: ROLE_TEACHER} 

So alle diese Rollen haben Zugang zu, dass:

- { path: ^/admin, roles: [ROLE_ADMIN, ROLE_TEACHER] } 
+0

Brilliant - haben Test und funktioniert gut – nmcilree

+0

Funktioniert das in einer OR-Logik? –

+1

Wenn der Benutzer die eine oder andere Rolle hat, auf die er Zugriff hat. Sie können es mit der Rollenhierarchie von @sergrkv Antwort kombinieren und dann hat ein Benutzer Zugriff auf den Router, wenn es die Rolle in der Hierarchie Kette hat – Udan

12

Sie die Rollenhierarchie in security.yml verwenden können Pfad.

+2

Funktioniert hervorragend - haben getestet und funktioniert gut. – nmcilree

+1

Wenn Rolle1 Rolle2 erbt, hat sie Zugriff auf alle ihre Pfade. Wenn Sie möchten, dass nur ein gemeinsamer Pfad für beide Rollen verfügbar ist und jede 5 hat, funktioniert dieses Beispiel nicht. – Udan

+0

@Udan die [doc] (http://symfony.com/doc/current/book/security.html#hierarchical-roles) sagt über Hierarchie, und es funktioniert in den meisten Fällen gut, wenn Ihre Anwendung eine saubere Struktur hat. – sergekv

Verwandte Themen