没有调用Laravel Gate方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有调用Laravel Gate方法相关的知识,希望对你有一定的参考价值。

在我的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 Gate方法的主要内容,如果未能解决你的问题,请参考以下文章

Laravel gate错误,没有这样的表:权限(SQL:select * from“permissions”)

Laravel 5.8 有条件地插入 sql 片段

Laravel 权限和角色与 Gate/Can

Laravel:Gate ::拒绝不工作

Laravel 8 Gate 基于数据库工匠迁移错误中的级别

Laravel 8:找不到类'App\Policies\Gate'