Cara menggunakan @can dengan betul dalam templat bilah menggunakan strategi
P粉821231319
P粉821231319 2024-04-04 13:51:55
0
1
461

Saya tidak dapat mencipta dalam templat bilah seperti yang dicadangkan oleh dokumentasi @can()

Ini adalah polisi saya:

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

Saya menggunakan kebenaran Spatie. Bagaimanapun, strategi ini berfungsi jika saya melindungi laluan dalam pengawal sebagai:

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

Sekarang, masalah saya ialah dengan bilah. Saya ingin memberikan butang untuk mengedit secara bersyarat $canal, saya cuba melakukan ini:

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

Inilah yang dikatakan oleh dokumentasi. Tetapi saya mendapat ralat yang mengatakan parameter lain diperlukan dalam panggilan:

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

Jadi saya rasa saya juga perlu menghantar pengguna masuk @can() , saya menukarnya kepada:

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

Ini juga tidak berkesan, ini tidak "memanggil" strategi sama sekali. bagaimana saya boleh tahu? Saya meletakkan beberapa Log::info() di sana.

Ada idea?

P粉821231319
P粉821231319

membalas semua(1)
P粉451614834

Untuk menyelesaikan isu ini, sila tambahkan @can 的第二个参数上发送 $code 而不是 AppModelsCanal::class dalam

, sebagai contoh: 🎜
@can('update', $canal)
    <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" />
@endcan
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan