我试图让用户只显示他们的报告。未通过身份验证的用户显示其他用户报告。但是,管理员可以显示所有用户的报告。我有这样的路线:
Route::get('/showReport/{id}', 'CeciController@showReport');我希望这条路由访问只有经过身份验证的用户,其中具有该报告id和管理员。如果我把它放在身份验证中间件组中,经过身份验证的用户可以访问其他用户报告。showReport/4,showReport/5,showReport/6。如果我把它放在管理中间件组下。即使是该id的认证用户也不能访问它。如何才能做到这一点呢?
查看:
Report for the month <b> {{$report->month}}: </b> <a href="{{url('/showReport', [$report->id])}}">Show Report Details</a>
下面是控制器:
public function showReport($id)
{
$report=Report::where('id',$id)->first();
if($report)
{
return view('show_report')->with('report',$report);
}
}发布于 2017-02-10 11:57:34
您可以创建一个新的中间件,并检查通过身份验证的用户的id是否与给定的id参数匹配:
public function handle($request, Closure $next)
{
# Allow only if the user is admin or id matches
$user = Auth::user();
if ($this->isAdmin($user) or ($request->input('id') === $user->id)) {
return $next($request);
}
return response('Unauthorized.', 401);
}https://stackoverflow.com/questions/42150994
复制相似问题