Je ne parviens pas à créer dans le modèle de lame comme le suggère la documentation @can()
Voici ma politique :
public function update(User $user, Canal $canal): bool { return ($canal->user->id == $user->id) and ($user->hasPermissionTo('actualizar canal')); }
J'utilise les autorisations Spatie. Quoi qu'il en soit, cette stratégie fonctionne si je protège la route dans le contrôleur comme :
public function edit(Request $request, Canal $canal) { $this->authorize('update', $canal); return view('Canal/edit', ['canal' => $canal]); }
Maintenant, mon problème vient de la lame. Je veux rendre conditionnellement un bouton à modifier $canal
, j'essaie de faire ceci :
@can('update', App\Models\Canal::class) <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" /> @endcan
C'est exactement ce que dit la documentation. Mais j'obtiens une erreur indiquant qu'un autre paramètre est requis dans l'appel :
Too few arguments to function App\Policies\CanalPolicy::update()
Donc je suppose que je dois aussi envoyer l'utilisateur @can()
, je l'ai changé en :
@can('update', Auth::user(), App\Models\Canal::class) <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" /> @endcan
Ça ne marche pas non plus, cela n'"appelle" pas du tout la stratégie. comment pourrais-je le savoir ? J'en ai mis du Log::info()
dedans.
Des idées ?
Pour résoudre ce problème, veuillez ajouter un message dans
@can
的第二个参数上发送$code
而不是AppModelsCanal::class
, par exemple :