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?
要解决此问题,请在
@can
的第二个参数上发送$code
而不是App\Models\Canal::class
,例如: