在表单请求中,我需要检查用户是否可以更新Vehicle
。我有以下方法:
public function authorize()
{
$vehicle = Vehicle::find($this->route('vehicle'));
return $vehicle and $this->user()->can('update', $vehicle);
}
我用dd
进行了检查,即使我将$this->user()->can('update', $vehicle)
策略的返回值放入false
,update
也会返回true
。我在控制器中尝试了该策略,但没有问题。就像can
方法在注册时找不到update
策略一样。
为什么不起作用?
答案 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。无论哪种方式,它都不干净,我知道。但是...我认为您遇到了一个已知错误。