Ich möchte eine zeilenbasierte Zugriffskontrolle auf meiner Laravel-Anwendung einrichten (derzeit 5.2, warten auf 5.5 lts). Dies könnte im Controller geschehen, aber ich habe mich gefragt, ob es einen Weg gibt, es im Framework etwas tiefer zu gehen.Zeilenbasierte Zugriffssteuerung für Laravel Ergebnisse
Lassen Sie uns sagen, dass es diese Modelle:
P - project
U - user (assigned to many projects)
D - Device (assigned to one project)
F - FAQ document (assigned to one project)
Der aktuell angemeldete Benutzer nur die Geräte und FAQ-Dokumente sehen sollten, die ihre Projekte gehören.
Mein aktueller Versuch ist es, dies in der Steuerung zu tun. Rufen Sie den aktuellen Benutzer ab, suchen Sie nach einer generischen Berechtigung "auf alle Projekte zugreifen" und - falls nicht vorhanden - treten Sie dem Projekt für das angeforderte Modell bei, um das Ergebnis zu begrenzen. Dies muss für alle Abfragen repliziert werden, die für dieses Modell ausgeführt werden, und ich bin der Meinung, dass diese Art von Redundanz nicht perfekt ist.
Gibt es eine Möglichkeit, etwas wie ein Interface-Merkmal mit einer Methode withAccess()
zu erstellen, die diese Modelle (Geräte- und FAQ-Dokument in meinem Beispiel) zwingt, diese Methode zu implementieren und die Abfrage einmal für die Modelldefinition auszuführen?
Ich würde gerne Middleware (systemweite Middleware, die als Filter funktioniert) erstellen. Eigentlich habe ich nicht verstanden, was du mit zeilenbasierter Zugriffskontrolle meinst. – webDev
Wie ich verstanden habe, funktioniert die Middleware gut für das Filtern einer Anfrage im Falle von keinem Zugriff, wie wenn Sie auf ein Gerät zugreifen möchten, das nicht zu einem Ihrer Projekte gehört. Aber was, wenn Sie auf eine Liste von Geräten zugreifen möchten? Wie könnte eine Middleware hier nützlich sein? (z.B.Filtern der Ergebnismenge) – McGo
Nein, Sie können alles mit dieser Middleware machen, bei Erfolg können Sie Ihre Geräteliste an die nächste Anfrage weiterleiten und in Ihrem Controller abrufen oder auf der nächsten Seite anzeigen – webDev