Ich verwende Wähler, um zu überprüfen, ob ein Benutzer die richtigen Berechtigungen hat, um eine bestimmte Aktion für eine Entität auszuführen.
CRUD-Aktionen sind einfach zu überprüfen. Aber wie überprüfe ich die Berechtigungen für Ergebnismengen oder Übersichten? Die Übersichten verwenden Paginierung mit PagerFanta, um die Ergebnisse zu paginieren. Eine vorherige Überprüfung der Ergebnisse ist aufgrund von Leistungsproblemen nicht möglich. Nur das Überprüfen der Ergebnisse, die in der Seitennummerierung zurückgegeben wurden, kann zu leeren oder halb leeren Seiten führen.
Ich denke daran, die gleiche Validierung in mein Repository zu schreiben, damit sie nur Ergebnisse liefert, die die Benutzer sehen dürfen. Dies führt jedoch zu einer Code-Duplizierung, da dieselbe Validierung jetzt einmal in einem Wähler und einmal in einem Repository dupliziert wird.
Gibt es dafür eine bessere Lösung oder sind die Wähler nicht die beste Lösung dafür?
Ah, dasselbe alte "Paginierung mit Bedingungen" -Problem, jetzt für das neue Zeitalter:)
(Ich glaube nicht, dass Google es gelöst hat, übrigens. Manchmal sieht man mehr Seiten in ihrer Paginierung, dann bekommt man tatsächlich).
Nun, natürlich ist das Problem in Ihrem Fall, dass Voter Ihnen in keiner Weise helfen wird, weil es nicht für Ihr Problem ist - es wird verwendet, um den Zugriff auf der Objektebene zu überprüfen, aber Sie müssen es auf dem SQL ausführen / dql / Abfrageebene Und der größte Unterschied ist, dass Ihre Methode dql-Bedingungen zurückgeben muss, anstatt zurückzuweisen, verweigert oder gewährt. Also ist die Aufgabe separat.
Sie können jedoch Funktionen hinzufügen, die diese Bedingungen in Ihre Wählerklasse zurückgeben, und sie in Ihr Repository einfügen. Zumindest auf diese Weise - Ihre Zugriffslogik für dasselbe Objekt wird in derselben Klasse sein.
Tags und Links symfony doctrine2 pagerfanta