Laravel Politiques - Comment Passer Plusieurs Arguments à la fonction

Je suis en train d'autoriser des utilisateurs de caractère à supprimer/mettre à jour le post. J'ai été d'utiliser des stratégies pour le faire, mais je ne pouvais passer un paramètre à la fonction politique. Si je passe plus de l'utilisateur et une autre variable, la variable n'est pas transmis à la fonction.

Modèles: l'Utilisateur a beaucoup de personnages, un personnage peut poster plusieurs messages. Donc, pour l'autorisation fins, je dois comparer le post character_id avec le caractère actuel de l'id...-

Par la docs, vous pouvez passer en plus des multiples de la Porte Façade:

Gate::define('delete-comment', function ($user, $post, $comment) {
    //
});

Mais je ne pouvais pas trouver de toute façon de le faire avec les politiques. Ce que j'avais à faire était d'injecter de l'objet de Requête pour obtenir l'objet nécessaire pour l'autorisation. Fondamentalement, je n'aurais même pas besoin de l'Utilisateur de l'Objet.

public function update(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

À l'aide de l'objet de la Requête fonctionne, mais il se sent très hacky. Est-il une plus belle façon d'atteindre cet objectif?

edit:

Dans le CharacterLocationController j'ai une méthode show et je veux autoriser l'action, avant de montrer la ressource.

public function show(Request $request, Character $character, Location $location)
{
    $this->authorize([$location, $character]);
    ...
}

La politique est enregistré comme ceci: 'App\Location' => 'App\Policies\LocationPolicy' dans le AuthServiceProvider

J'ai perdu le tableau passé à la fonction politique, et il ne renvoie la $location.

public function show(User $user, $data) {
    dd($data); //expecting location and character
    return !$location->private || $location->authorized->contains($this->character);
}

OriginalL'auteur Johannes | 2016-04-07