自定义身份验证中间件 - 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 版本中添加)。
您的选择是为此创建一个单独的中间件,或者使用路由过滤器。
您可以通过将其放入 RouteServiceProvider
的 boot
方法来创建路由过滤器:
$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...
});
Laravel 5 随附的 auth
中间件非常适合用户专用路由和控制器,但我想添加检查用户是否为管理员的功能。
目前,在我的控制器中,每个 class:
if (Auth::user()->level <= 1) {
// admin can do these actions
} else {
// redirect
}
它非常多余,我想看看我的选择是什么。因为我想保留原来的 auth
中间件用于用户身份验证,我应该构建一个新的用于管理员身份验证,还是我可以对原来的 auth
中间件进行一些简单的更改来解释我的代码以上?
Laravel 5.0中的中间件不支持参数(这将在即将发布的 5.1 版本中添加)。
您的选择是为此创建一个单独的中间件,或者使用路由过滤器。
您可以通过将其放入 RouteServiceProvider
的 boot
方法来创建路由过滤器:
$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...
});