Laravel 5.3:创建管理中间件

时间:2017-03-02 09:26:22

标签: php laravel laravel-5 laravel-5.3

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

不幸的是,没有管理员可以查看该网站。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

首先,您的中间件应该在每种情况下都返回一些内容。在你的例子中,当你第一次失败时,再也没有回归了。

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

尝试使用此

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

关闭:但是我强烈建议在每次if状态之后使用括号,即使你内部只有一行。