Zweig/Symfony2 : Vielfache Rollen mit is_granted
Ich will wissen, wenn ein Benutzer die 'VIEW_GEOLOC_DATA' Rolle, aber ich habe ein problem mit dem twig-Funktion is_granted()
.
Wenn ich in einer Vorlage :
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')) }}
Dies ist es, was ich beim Rendern :
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)
Habe ich versucht, an-und Abmelden, Entleerung symfony-cache.
Ich habe auch versucht, schalten Sie die Reihenfolge der Rollen im array von der Methode zurückgegeben getRoles() meiner User : die Funktion is_granted wird nur unter Berücksichtigung der ersten Rolle des Arrays
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie erwarten, dass Symfony2 Umgang mit Ihren Rollen, dann Rollen beginnen müssen mit "ROLE_".
Ändern
zu
Natürlich, werden Sie brauchen, um dies zu ändern in deiner config, und fügen Sie die neue Rolle ein.
Diese Antwort gilt nicht, wenn Sie mit einer dedizierten Rolle Klasse.
public function getRoles() { if($this->role == 100) return array('ROLE_SUPER_ADMIN', 'VIEW_GEOLOC_DATA'); }
Aber das Verhalten ist das gleiche wie Verwalten von Rollen in der DatenbankIch landete eine neue Methode
hasRole
in meinemUser
Klasse :Dann in eine Vorlage, die ich verwenden:
EDIT:
Wie @JonnyS sagte, es kann möglich sein, dass die Rollen beginnen müssen, mit
ROLE_
arbeiten mitis_granted
Symfony-s-Funktion. Nicht getestet.return in_array($role, $this->getRoles());
Erstellen Sie eine Sicherheits-Wähler, die prüft.
http://symfony.com/doc/current/cookbook/security/voters_data_permission.html
Dies ist viel sauberer aus, dann erstellen Sie eine Methode, die auf ein Unternehmen für diese.