Laravel 5.3:创建管理中间件

Laravel 5.3: Create Admin Middleware

我创建了一个名为 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');

不幸的是 none 管理员也可以查看站点。有什么建议吗?

首先,您的中间件应该 return 在每种情况下都应该有所作为。在您的示例中,当您的第一个 if 失败时,不再有 return。

第二个问题是您的中间件重定向到路由 /list_hosts,这会导致无限循环。

尝试使用这个

public function handle($request, Closure $next)
{
    return Auth::user()->isAdmin() ? $next($request) : redirect('/home');
}

关闭:但是我强烈建议在每个 if 语句之后使用方括号,即使里面只有一行。