我很难完全理解中间件在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');
}
他们都在受保护的$ routeMiddleware下的Kernal.php中列出。
所以我希望经理能够访问“商店”。功能,以便他们可以在系统中保存新用户,但是当我使用本文顶部显示的中间件时,它只会将管理员和经理发送回路径/。
任何人都可以帮助解释构造函数中的中间件除了和只做什么以及为什么似乎取消了另一个?欢呼声。
答案 0 :(得分:0)
默认情况下,中间件适用于控制器中的每个方法。
'除了'告诉中间件应用于控制器的所有方法',除了'通过except参数指定的方法。
'仅'相反,将'中间件'仅'应用于指定的方法。
关于您的代码,您可能应该移动
if (!Auth::check()) {
return redirect()->guest('/auth/login');
}
在另一个仅检查用户身份验证的middlware中,然后在routes.php中应用此中间件,如下所示:
$router->group(['middleware' => 'auth'], function() {
// routes that require authentication
});