【问题标题】:Laravel 5.2 - Restricting access in Controller Construct to two user groups using MiddlewareLaravel 5.2 - 使用中间件将控制器构造中的访问限制为两个用户组
【发布时间】:2016-09-13 08:45:25
【问题描述】:

我很难完全理解中间件在 Laravel 5+ 中的工作原理。我有一个用户控制器,我想允许管理员通过中间件访问所有功能,然后只允许管理员访问少数功能。目前构造函数在 UserController 的顶部看起来像这样

    $this->middleware('admin');

    $this->middleware('manager', ['only', [
        'store',
        'profile',
        'profileUpdate'
    ]]);

每个中间件如下:

public function handle($request, Closure $next)
{
    if (!Auth::check()) {
        return redirect()->guest('/auth/login');
    }

    if (Session::get('is_admin') === 1) {
        return $next($request);
    }

    return Redirect::to('/auth/login');
}

和经理:

public function handle($request, Closure $next)
{
    if (!Auth::check()) {
        return redirect()->guest('/auth/login');
    }

    if (Session::get('is_manager') === 1) {
        return $next($request);
    }

    return Redirect::to('/auth/login');
}

它们都列在 Kernal.php 中受保护的 $routeMiddleware 下。

所以我希望管理员能够访问“存储”功能,以便他们可以在系统中保存新用户,但是当我使用本文顶部显示的中间件时,它只会将管理员和管理员都送回到路线/。

谁能帮助解释一下构造函数中的中间件中的 except 和 only 做什么,以及为什么一个似乎取消了另一个?干杯。

【问题讨论】:

    标签: laravel middleware


    【解决方案1】:

    默认情况下,中间件适用于控制器中的每个方法。

    'Except' 告诉中间件应用于控制器的所有方法,“除了”通过 except 参数指定的方法。

    'Only' 则相反,将中间件 'only' 应用于指定的方法。

    关于你的代码,你可能应该移动

    if (!Auth::check()) {
        return redirect()->guest('/auth/login');
    }
    

    在一个单独的中间件中,它只检查经过身份验证的用户,然后在你的 routes.php 中应用这个中间件,如下所示:

    $router->group(['middleware' => 'auth'], function() {
        // routes that require authentication
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2019-07-04
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多