So verwenden Sie @can mithilfe der Strategie korrekt in der Blade-Vorlage
P粉821231319
P粉821231319 2024-04-04 13:51:55
0
1
471

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粉821231319
P粉821231319

Antworte allen(1)
P粉451614834

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

@can('update', $canal)
    <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" />
@endcan
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage