Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser correctement @can dans le modèle de lame en utilisant la stratégie

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 ?

P粉821231319P粉821231319171 Il y a quelques jours326

répondre à tous(1)je répondrai

  • P粉451614834

    P粉4516148342024-04-05 10:10:24

    Pour résoudre ce problème, veuillez ajouter un message dans @can 的第二个参数上发送 $code 而不是 AppModelsCanal::class, par exemple :

    @can('update', $canal)
        <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" />
    @endcan

    répondre
    0
  • Annulerrépondre