路由限制仅限该用户和管理员

时间:2017-02-10 03:27:31

标签: laravel laravel-5.3

我试图让用户只显示他们的报告。未经过身份验证的用户显示其他用户报告但是,管理员可以显示所有用户报告。 我有这条路线:

Route::get('/showReport/{id}', 'CeciController@showReport');

我希望只有具有该报告ID和管理员的经过身份验证的用户才能访问此路由。如果我将其放入auth中间件组,经过身份验证的用户可以访问其他用户报告。showReport/4showReport/5showReport/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);
        }      
    }

1 个答案:

答案 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);
}