我无法按照文档的建议在刀片模板中创建 @can()
这是我的政策:
public function update(User $user, Canal $canal): bool { return ($canal->user->id == $user->id) and ($user->hasPermissionTo('actualizar canal')); }
我正在使用 Spatie 权限。无论如何,如果我将控制器中的路由保护为:
,则此策略有效public function edit(Request $request, Canal $canal) { $this->authorize('update', $canal); return view('Canal/edit', ['canal' => $canal]); }
现在,我的问题出在刀片上。我想有条件地渲染一个按钮来编辑 $canal
,我正在尝试这样做:
@can('update', App\Models\Canal::class) <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" /> @endcan
这正如文档所说。但我收到一个错误,它表示调用中需要另一个参数:
Too few arguments to function App\Policies\CanalPolicy::update()
所以我猜我还必须在 @can()
中向用户发送,我将其更改为:
@can('update', Auth::user(), App\Models\Canal::class) <x-gui.link-button href="{{ route('canal.edit', $canal->id) }}" value="Modificar" /> @endcan
这也不起作用,这根本不“调用”该策略。我怎么知道?我在那里放置了一些 Log::info()
。
有什么想法吗?
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