Laravel-Richtlinien - Wie mehrere Argumente übergeben werden, um zu funktionieren

8

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.

%Vor%

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.

%Vor%     
Johannes 07.04.2016, 17:01
quelle

1 Antwort

13

Ich denke, da ist möglicherweise etwas Verwirrung darüber, welche Funktionen was tun.

Wenn Sie

verwenden %Vor%

Oder in CommentPolicy

%Vor%

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

%Vor%

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.

    
user3158900 07.04.2016, 17:46
quelle