0
我有一个拥有用户和产品的应用程序。只有产品所有者才能查看产品。Laravel只允许所有者用户访问路线
如果用户猜测产品ID,他们可能会查看产品。例如
http://booker.app/admin/products/32
继该链接将允许用户登录任何可查看产品的ID为32
这是有问题的路线:
Route::middleware(['middleware' => 'auth'])->prefix('admin')->group(function(){
Route::resource('products', 'ProductController');
});
我的产品控制器显示方法:
public function show(Product $product)
{
if($product->user_id !== Auth::user()->id){
return $this->forbidden('admin/products');
}
return $this->makeResponse('admin.products.product', compact('product'));
}
forbidden和makeResponse函数只是检查是否需要est是一个ajax请求,如果是的话返回json。
正如你所看到的,我正在使用路由模型绑定,并且正在检查授权用户是否与产品user_id相同。基本上有更好的方法来检查用户是否是产品的拥有者。
使用[policies](https://laravel.com/docs/5.4/authorization#writing-policies)是做到这一点的最“方法”。 – milo526