自定义身份验证中间件 - Laravel 5

Customizing auth middleware - Laravel 5

Laravel 5 随附的 auth 中间件非常适合用户专用路由和控制器,但我想添加检查用户是否为管理员的功能。

目前,在我的控制器中,每个 class:

if (Auth::user()->level <= 1) {
    // admin can do these actions
} else {
    // redirect
}

它非常多余,我想看看我的选择是什么。因为我想保留原来的 auth 中间件用于用户身份验证,我应该构建一个新的用于管理员身份验证,还是我可以对原来的 auth 中间件进行一些简单的更改来解释我的代码以上?

Laravel 5.0中的中间件不支持参数(这将在即将发布的 5.1 版本中添加)。

您的选择是为此创建一个单独的中间件,或者使用路由过滤器。


您可以通过将其放入 RouteServiceProviderboot 方法来创建路由过滤器:

$router->filter('userLevel', function($route, $request, $level)
{
    $user = auth()->user();

    if ( ! $user || $user->level > $level)
    {
        return response('Unauthorized', 401);
    }
});

然后在您的路线中使用该过滤器:

Route::group(['before' => 'userLevel:1'], function($router)
{
    // define routes...
});