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);
}
InformationsquelleAutor Johannes | 2016-04-07
Schreibe einen Kommentar