Heim  >  Fragen und Antworten  >  Hauptteil

So verwenden Sie @can mithilfe der Strategie korrekt in der Blade-Vorlage

Ich kann nicht in der Blade-Vorlage erstellen, wie in der Dokumentation vorgeschlagen @can()

Das ist meine Richtlinie:

public function update(User $user, Canal $canal): bool {
  return ($canal->user->id == $user->id) and ($user->hasPermissionTo('actualizar canal'));
}

Ich verwende Spatie-Berechtigungen. Wie auch immer, diese Strategie funktioniert, wenn ich die Route im Controller wie folgt schütze:

public function edit(Request $request, Canal $canal) {
    $this->authorize('update', $canal);
    return view('Canal/edit', ['canal' => $canal]);
  }

Jetzt liegt mein Problem bei der Klinge. Ich möchte eine Schaltfläche zum Bearbeiten bedingt rendern $canal, ich versuche Folgendes:

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

Genau das steht in der Dokumentation. Ich erhalte jedoch eine Fehlermeldung, die besagt, dass im Aufruf ein weiterer Parameter erforderlich ist:

Too few arguments to function App\Policies\CanalPolicy::update()

Also muss ich wohl auch den Benutzer reinschicken @can(), ich habe es geändert in:

@can('update', Auth::user(), App\Models\Canal::class)
    <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" />
  @endcan

Das funktioniert auch nicht, das „ruft“ die Strategie überhaupt nicht auf. woher soll ich das wissen? Ich habe etwas Log::info() da reingelegt.

Irgendwelche Ideen?

P粉821231319P粉821231319221 Tage vor437

Antworte allen(1)Ich werde antworten

  • P粉451614834

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

    要解决此问题,请在 @can 的第二个参数上发送 $code 而不是 App\Models\Canal::class,例如:

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

    Antwort
    0
  • StornierenAntwort