首页  >  问答  >  正文

如何使用策略在刀片模板中正确使用@can

我无法按照文档的建议在刀片模板中创建 @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粉821231319P粉821231319171 天前325

全部回复(1)我来回复

  • 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

    回复
    0
  • 取消回复