gpt4 book ai didi

未调用 Laravel Gate 方法

转载 作者:行者123 更新时间:2023-12-04 17:51:47 24 4
gpt4 key购买 nike

在我的 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 错误。但是,如果我不将项目作为参数传递,代码确实会被调用,但这会使它变得毫无用处。

我还想补充一点,在这种情况下,我不能使用 Policy,因为创建方法只接受一个参数($user),如果我尝试传递 $project,它会像传递 Gate 一样失败。

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

最佳答案

我也有同样的问题。当 Gate::allows() 中的第二个参数是一个 Eloquent 模型时,似乎发生了一些错误。

如果你传入 denies() 任何其他变量(甚至是对象,但不是 Eloquent 模型),你的 Log::info() 将起作用。我用它浪费了一整天并切换到 $user->can()

关于未调用 Laravel Gate 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44122779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com