Laravel 自定义策略方法总是返回 403

问题描述 投票:0回答:1

路线

Route::get('/post/preview/{slug}', [PostController::class, 'viewPreview'])->name('post.single.preview');

后置控制器

protected function resourceAbilityMap()
{
    return array_merge(parent::resourceAbilityMap(), [
        'viewPreview' => 'viewPreview'
    ]);
}

public function viewPreview($slug)
{
    $post = Post::where('slug', $slug)->firstOrFail();

    $this->authorize('viewPreview', $post);

    return view('post.single', [
        'post' => $post,
        'morePosts' => $this->getMorePosts($post->id, 3),
    ]);
}

发布政策

public function viewPreview(User $user, Post $post)
{
    return true;
}

无论我将

true
还是
false
放入策略方法中,它总是返回 403。我错过了什么?

php laravel
1个回答
0
投票

部分

protected function resourceAbilityMap()
{
    return array_merge(parent::resourceAbilityMap(), [
        'viewPreview' => 'viewPreview'
    ]);
}

不需要。我在 SO 上找到了它,但它不在 Laravel 官方文档中。

问题是,在测试时我没有登录,对于需要类型提示模型的策略方法,Laravel 将始终返回

false
(在本例中为
User $user
)。为了测试,添加
?
使其工作:
viewPreview(?User $user, ...)

© www.soinside.com 2019 - 2024. All rights reserved.