【问题标题】:Laravel use resource controller method $id parameter as middleware parameterLaravel 使用资源控制器方法 $id 参数作为中间件参数
【发布时间】:2016-12-31 07:12:45
【问题描述】:

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

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

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

public function show($id)
{
  //
}

【问题讨论】:

    标签: php laravel laravel-middleware


    【解决方案1】:

    您可以在中间件的handle方法中访问$request对象,获取请求页面的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 参数只是您自己的方法和参数的占位符名称。

    【讨论】:

    • 谢谢。对于可能会发现这一点的其他人:“id”无法被识别,但我发现您可以使用“$request->route()->parameters()”找到这些。只需将 id 替换为任何名称(在我的情况下是资源的名称。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多