我试图让用户只显示他们的报告。未经过身份验证的用户显示其他用户报告但是,管理员可以显示所有用户报告。 我有这条路线:
Route::get('/showReport/{id}', 'CeciController@showReport');
我希望只有具有该报告ID和管理员的经过身份验证的用户才能访问此路由。如果我将其放入auth中间件组,经过身份验证的用户可以访问其他用户报告。showReport/4
,showReport/5
,showReport/6
。如果我把它放在管理中间件组下。即使是该身份验证的经过身份验证的用户也无法访问它。如何实现这一目标?
查看:
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);
}
}
答案 0 :(得分:1)
您可以创建新的中间件并检查Authenticated用户的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);
}