没有调用Laravel Gate方法

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

在我的Laravel 5.4应用程序中,用户可以在这些项目中创建项目,然后创建帖子。

我试图阻止用户在他们无法访问的项目中创建或编辑帖子。为此,我实现了一个门,如下所述:https://laravel.com/docs/5.4/authorization#gates门检查用户是否是项目的所有者。

Gate::define('create-post', function ($user, $project) {
    Log::info($project) // !!! Never gets called
    return $project->owner_id == $user->id;
});

在PostController上,我调用Gate :: denies将项目作为参数传递

if (Gate::denies('create-post', $project)) {
    abort(403);
}

问题是我为门定义的代码永远不会被调用。相反,它总是返回false并转到403错误。但是,如果我没有将项目作为参数传递,那么代码会被调用,但这会使它变得无用。

我还想补充一点,在这种情况下,我不能使用策略,因为create方法只接受一个参数($ user),如果我尝试传递$ project,它的失败方式与Gate相同。

这是一个错误吗?是否有另一种更好的方法来实现此功能?谢谢。

laravel authorization
4个回答
© www.soinside.com 2019 - 2024. All rights reserved.