Laravel使用资源控制器方法$ id参数作为中间件参数

时间:2016-08-24 08:41:03

标签: php laravel laravel-middleware

我正在尝试制作一个中间件来检查用户是否具有查看某些页面所需的权限。在我目前用来调用中间件的代码下面。我现在传递用户需要具有的角色的名称,但我还想传递调用store方法时使用的必需id。

有没有办法做到这一点,还是应该在此控制器中创建单独的功能,还是将路由检查中间件移至routes.php?我不想移动它,因为这意味着我必须重新划分我的资源控制器已经定义的所有路由。

public function __construct()
{
    $this->middleware('permission:Manager',['only' => [
        'show',
    ]]);
}

public function show($id)
{
  //
}

1 个答案:

答案 0 :(得分:2)

您可以在中间件的$request方法中访问handle对象,以获取所请求页面的ID和执行请求的用户,例如:

public function handle($request, Closure $next, $role)
{
    if ( $request->user() && $request->has('id'))
    {
        if ($request->user()->hasRole($request->id, $role)
            return $next($request);
    }        
    return redirect('/403');  // redirect when not allowed
}

请注意hasRole方法和$role参数只是您自己的方法和参数的占位符名称。