J'ai besoin d'une politique pour créer des arbres dans un tournoi.Les politiques de Laravel se résolvent bizarrement
Ainsi, Dans mon treeController @ magasin, j'ai:
if (Auth::user()->cannot('generateTree', new Tree(),$tournament)) {
throw new AuthorizationException();
}
Et ma politique correspondante est:
TreePolicy.php:
public function generateTree(Tree $tree, Tournament $tournament)
{
dd($tournament);
return ($tournament->user_id == Auth::user()->id);
}
Et je reçois:
Type error: Argument 1 passed to App\Policies\TreePolicy::generateTree() must be an instance of App\Tree, instance of App\User given, called in /laravel/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php on line 382
Quoi Ai-je disparu ???
EDIT: En réponse à @andonovn,
Je l'ai essayé avec:
public function store(User $user, Tree $tree, Tournament $tournament)
{
dd($tournament);
}
Et
if (Auth::user()->cannot('generateTree', Tree::class,$tournament)) {
throw new AuthorizationException();
}
-> il me donne un 403
Ou
$this->authorize('store', $tournament,Tree::class);
-> il n'entre pas le dd();
La seule façon je l'ai trouvé au travail est de mettre le contenu de la politique dans le contrôleur qui est pas si belle:
if ($tournament->user_id != Auth::user()->id){
throw new AuthorizationException();
}
EDIT 2: je résous avec qui:
Contrôleur:
if (Auth::user()->cannot('store', [Tree::class,$tournament])) {
throw new AuthorizationException();
}
Dans la politique
public function store(User $user, Tournament $tournament)
{
return ($tournament->user_id == $user->id);
}
ne peut pas méthode pour
Auth::user()->cannot('generateTree', [Tree::class, $tournament])
(combiner les paramètres de 2e et 3e dans le tableau, semble comme Laravel est toujours attendre 2 arguments où le 2ème peut être rangée) Vérifiez mon question mise à jour! –Vérifiez ma réponse mise à jour, j'espère que cela fonctionne :) – andonovn
cela fonctionne bien, mais alors je ne peux pas le faire fonctionner en vue, @if (Auth :: user() -> can ('store', [Tree :: class, $ tournoi])) ne fonctionnent pas –