【发布时间】:2018-11-16 12:12:13
【问题描述】:
我正在构建用户可以上传图像的应用程序。在用户点击他上传的图片后,laravel 将他重定向到路由 /images/{image_id} ,用户可以在其中获取他的图片的详细信息,如果他愿意,可能会删除图片。现在的问题是,当我使用属于另一个用户图像的另一个图像 id 在浏览器中手动编写此路由时,我可以使用他上传的图像详细信息打开他的视图。如果这张图片不属于他,我该如何阻止用户进入这条路线? web.php中的路由:
Route::get('/images/{image_id}', 'ImageController@show');
这是 ImageController 中重定向用户以显示图像视图的方法:
public function show($id){
$image = Image::findOrFail($id);
return view('user.show_image', compact('image'));
}
尝试类似的方法是不是不错的选择:
public function show($id){
$image = Image::findOrFail($id);
if(Auth::user()->id != $image->user_id)
{
return redirect()->back();
}
return view('user.show_image', compact('image'));
}
..或者我应该使用某种中间件。谢谢
【问题讨论】:
-
经验法则;如果您最终要在代码中多次执行此操作,请使用函数(或在本例中为中间件)。所以对于单条路由,可以在关联函数中做,但是在多条路由上,最好使用中间件。
-
我认为您将其放入控制器的方法在这种情况下是最好的。您可以将它放在中间件中,但您需要进行额外的数据库查询来检索图像的
user_id。所以,在这种情况下,我认为你的解决方案是最好的方法。
标签: laravel laravel-5.6 laravel-middleware