Ich versuche, einen Benutzer zu autorisieren, Post zu löschen / zu aktualisieren. Ich habe Richtlinien dafür verwendet, aber ich konnte nur einen Parameter an die Richtlinienfunktion übergeben. Wenn ich mehr als den Benutzer und eine andere Variable übergebe, wird die Variable nicht an die Funktion übergeben.
Modelle: Der Benutzer hat viele Zeichen, ein Charakter kann mehrere Beiträge veröffentlichen. Zu Autorisierungszwecken müsste ich also die character_id des Posts mit der ID des aktuellen Charakters vergleichen ...
In den Dokumenten können Sie mehr Multiples an die Gate Facade übergeben:
%Vor%Aber ich konnte es trotzdem nicht finden. Was ich tun musste, war das Request-Objekt zu injizieren, um das für die Autorisierung benötigte Objekt zu erhalten. Im Grunde würde ich nicht einmal das Benutzerobjekt benötigen.
%Vor%Die Verwendung des Request-Objekts funktioniert, aber es fühlt sich sehr hacky an. Gibt es einen schöneren Weg, dies zu erreichen?
bearbeiten:
In CharacterLocationController
habe ich eine Methode show
und ich möchte die Aktion autorisieren, bevor ich die Ressource zeige.
Die Richtlinie wird wie folgt registriert: 'App\Location' => 'App\Policies\LocationPolicy'
in AuthServiceProvider
Ich habe das an die Policy-Funktion übergebene Array ausgegeben und gibt nur $location
aus.
Ich denke, da ist möglicherweise etwas Verwirrung darüber, welche Funktionen was tun.
Wenn Sie
verwenden %Vor% Oder in CommentPolicy
Sie definieren lediglich die Regeln. An dieser Stelle machen wir uns keine Sorgen darüber, etwas zu übergeben, nur dass die Objekte, die wir erhalten haben, miteinander interagieren können oder sollen. Der einzige Unterschied zwischen diesen beiden ist, wenn Sie Richtlinien verwenden, es ist nur eine einfache Möglichkeit, alle Ihre Regeln in einer einfachen und leicht zu lesenden Klasse zu abstrahieren. Wenn Sie eine App mit möglicherweise hunderten von Tabellen und Modellen haben, wird es schnell unübersichtlich werden, wenn Sie diese Regeln überall in Ihrer App haben, so dass Richtlinien helfen würden, sie alle organisiert zu halten.
Es ist, wenn Sie tatsächlich überprüfen, ob jemand die Erlaubnis hat, etwas zu tun, wenn Sie diese Elemente weiterreichen sollten. Zum Beispiel, wenn Sie Folgendes tun,
%Vor% Oder wenn in CommentController
Damit wird gesteuert, welche Parameter an die Richtlinie oder die Methode Gate::define
übergeben werden. Laut den Dokumenten ist der Parameter $user
bereits für Sie hinzugefügt worden, so dass Sie sich in diesem Fall nur darum kümmern müssen, die richtige $post
und $comment
zu übergeben.
Tags und Links php authorization laravel-5.2 laravel