2010-11-21 11 views
0

Ich habe einfach CRUD-Funktion von Symfony generiert. Es gibt Artikelklasse und Artikelbesitzer. Ich möchte verhindern, dass andere Benutzer als Besitzer des aktuellen Artikels bearbeiten. Ich dachte über benutzerdefinierte meinen Filter oder Validator, aber wenn ich Validator implementieren wird einige der Benutzer in Bearbeitungsformular (sie konnten nicht nur gesendet). Aber wenn ich Benutzerfilter implementiere, wird es ein Problem geben, Filter nur vor einigen Aktionen auszuführen (in diesem Fall bearbeiten).Symfony Zugriffsbeschränkung auf CRUD-Aktionen

Wie soll ich das tun?

Antwort

0

Ich denke, das ist eingebaut. Sie sollten über die Datei security.yml lesen.

UPDATE: Ich sehe ... anscheinend das Sicherheitssystem calls the method hasCredential() of the user object. Vielleicht könnten Sie diese Methode in Ihrer benutzerdefinierten Benutzerklasse erweitern, so dass sie eine spezielle Prüfung durchführt, wenn ihr Parameter beispielsweise "article_owner" lautet.

Sobald dies geschehen ist, alles, was Sie dieses Credential Sie

+0

Ich weiß, was es ist. Aber ich sollte zum Beispiel machen. "alle: Credentials: owner_article_5" für alle Artikel ... Ant weiß ich nicht, wie Anmeldeinformationen für jeden Besitzer angeben. – user364622

+0

@ user364622: Siehe mein Update oben – greg0ire

+0

Schön:] Ich habe schon eine Methode "isOwner" in meiner Action-Klasse geschrieben. Aber Lösung, die Sie vorschlagen, ist nett und klug. Ich denke, dass eine Überlastung der Benutzerklasse für dieses Problem gut ist. – user364622

0

wollen für die Aktionen angeben, zu tun haben, werde ich nicht glaube, symfony steuern den Zugriff auf Objektebene aus der Box unterstützt. Ich hatte dieses spezielle Problem in einer meiner Anwendungen und am Ende habe ich explizit überprüft, ob der angemeldete Benutzer mit dem Besitzer in der Bearbeitungsaktion übereinstimmt. Dies ist die Funktion, die ich dafür verwendet habe:

protected function hasObjectAccess($obj) { 
    if ($this->getUser()->hasGroup('admin') 
     || $obj->getOwnerId() == $this->getUser()->getId()))) { 
     return true; 
    } 
    return false; 
} 
Verwandte Themen