授权在表单请求中返回false

时间:2019-01-20 17:13:43

标签: php laravel authorization

在表单请求中,我需要检查用户是否可以更新Vehicle。我有以下方法:

public function authorize()
{
    $vehicle = Vehicle::find($this->route('vehicle'));

    return $vehicle and $this->user()->can('update', $vehicle);
}

我用dd进行了检查,即使我将$this->user()->can('update', $vehicle)策略的返回值放入falseupdate也会返回true。我在控制器中尝试了该策略,但没有问题。就像can方法在注册时找不到update策略一样。

为什么不起作用?

1 个答案:

答案 0 :(得分:1)

这似乎是我很久以前在类的pull中使用route()时遇到的一个问题-似乎是在拉数组。如您所说,这不是文档中反映的内容。

看看Laravel bug report here

如果这确实是您的问题,则有可能的解决方法。从问题页面引用(为用户插入车辆,或其他):

$route = $request->route();
$user_id = is_array($route) ? $route[2]['user_id'] : $route->parameter('user_id');

很丑,我知道。但是,您也可以稍稍更改架构,并根据需要像常规控制器方法中那样拉入id,

public function myNewPreAuthThing(Request $request, $id){}

然后将正确的ID发送给auth。无论哪种方式,它都不干净,我知道。但是...我认为您遇到了一个已知错误。