我创建了一个名为Admin
的中间件public function handle($request, Closure $next)
{
if (Auth::guard($guard)->check()) {
if (Auth::user()->isAdmin())
return redirect('/list_host');
else {
// return $next($request);
return redirect('/home');
}
}
}
IsAdmin看起来像这样:
public function isAdmin()
{
return $this->is_admin;
}
他们想检查用户是否已登录并拥有管理员权限。 我还将它添加到Kernel.php
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'admin' => \App\Http\Auth\Middleware\Admin::class,
];
然后我在Routes / web.php中使用它
Route::get('/list_hosts', function () {
return view('/list_hosts');
})->middleware('admin');
不幸的是,没有管理员可以查看该网站。有什么建议吗?
答案 0 :(得分:1)
首先,您的中间件应该在每种情况下都返回一些内容。在你的例子中,当你第一次失败时,再也没有回归了。
第二个问题是您的中间件重定向到路由/list_hosts
,导致自身无限循环。
尝试使用此
public function handle($request, Closure $next)
{
return Auth::user()->isAdmin() ? $next($request) : redirect('/home');
}
关闭:但是我强烈建议在每次if状态之后使用括号,即使你内部只有一行。