我正在使用 Laravel 11、Vue 3 和 InertiaJS。
我正在尝试获得工作授权,但即使策略返回 true,它也会不断返回 403。
惯性链接有条件地显示(成功)给定帖子的编辑表单的链接:
<Link
v-if="user.can.update"
:href="route('posts.edit', { post: post })"
>
Update
</Link>
下面的两条路线都失败了,我尝试过使用和不使用
middleware('auth')
。
Route::get( 'posts/{post}/edit', [PostController::class, 'edit'])->name('posts.edit')
->middleware('auth')->can('update', 'post');
Route::get( 'posts/{post}/edit', [PostController::class, 'edit'])->name('posts.edit')
->can('update', 'post');
和
PostPolicy
:
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
dd($user->id === $post->user_id); // returns true
日志似乎也没有接收到 403 消息,所以我在那里看不到堆栈跟踪。我完全不知所措,这是什么问题?
我尝试过使用或不使用中间件“auth”,但没有成功。立即将
Gate::authorize
放入控制器似乎也不起作用。
返回$post->user->is($user)
确保为上面的示例设置了关系。要测试策略是否命中,只需编写 return true 并查看它是否执行,如果没有,则策略未命中。