Laravel-Richtlinien - Wie zum Übergeben Mehrerer Argumente an die Funktion
Ich versuche zu autorisieren Benutzer Zeichen zu löschen/update-post. Ich war mit Politik zu tun, aber ich konnte nur einen parameter, um die Richtlinien-Funktion. Wenn ich passieren mehr als die Benutzer-und anderen Variablen die variable nicht an die Funktion übergeben.
Modelle: der Benutzer hat viele Zeichen, ein Zeichen posten kann mehrere Beiträge. Also für die Autorisierung, die ich hätte vergleichen Sie die post character_id mit dem aktuellen Charakter id...-
Pro die docs, die Sie übergeben können, mehr gruppiert, um die Gate-Fassade:
Gate::define('delete-comment', function ($user, $post, $comment) {
//
});
Aber ich konnte nicht finden, dass sowieso zu tun mit Politik. Was ich tun musste, war, um zu injizieren, das Anfrage Objekt zu erhalten das Objekt benötigt für die Autorisierung. Im Grunde bräuchte ich noch nicht einmal das User-Objekt.
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
Mit dem Request-Objekt funktioniert, aber es fühlt sich sehr hacky. Gibt es eine schönere Art, dies zu erreichen?
edit:
In der CharacterLocationController
ich habe eine Methode show
und will ich ermächtige die Aktion vor dem anzeigen der Ressource.
public function show(Request $request, Character $character, Location $location)
{
$this->authorize([$location, $character]);
...
}
Die Politik registriert, wie diese: 'App\Location' => 'App\Policies\LocationPolicy'
im AuthServiceProvider
Ausgegeben ich das array übergeben, um die politische Funktion, und es gibt nur den $location
.
public function show(User $user, $data) {
dd($data); //expecting location and character
return !$location->private || $location->authorized->contains($this->character);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es gibt möglicherweise einige Verwirrung hier, was die Funktionen tun, was.
Wenn Sie
Oder in der
CommentPolicy
Alles, was Sie tun, ist die Festlegung der Regeln. An diesem Punkt, wir sind nicht besorgt über die Weitergabe nichts, nur dass die Objekte, die wir empfangen können oder sollten in der Lage sein, miteinander zu interagieren. Der einzige Unterschied zwischen diesen beiden ist bei der Verwendung von Politik, es ist nur eine einfache Möglichkeit zu abstrahieren, alle Regeln in einer einfachen und leicht zu Lesen, Klasse. Wenn Sie eine app haben, mit möglicherweise Hunderten von Tabellen und Modellen, es wird schnell verwirrend, wenn Sie diese Regeln übersät alle über Ihren app-Richtlinien würden helfen, Sie zu halten alles organisiert.
Es ist, wenn Sie wirklich prüfen, ob jemand die Erlaubnis hat, etwas zu tun, wenn Sie sollten Sie diese Elemente zusammen. Zum Beispiel, wenn Sie führen die folgenden,
Oder wenn in der
CommentController
Das ist das, was steuert die Parameter, die übergeben werden soll, um die Politik oder die
Gate::define
Methode. Laut der docs, die$user
parameter ist bereits für Sie Hinzugefügt, so dass in diesem Fall, müssen Sie nur sorgen über die übergabe des richtigen$post
und$comment
geändert wird.CommentController
Beispiel, was die Politik " verwendet wird? Wird versucht es zu beheben, das erste Objekt in das übergebene array?$this->authorize('create', [Comment::class, $post]);
authorizeResource()
?