2017-03-02 61 views
0

我創建了一個名爲中間件管理員Laravel 5.3:建立管理中間件

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, 
]; 

然後,我用它在路線/ web.php

Route::get('/list_hosts', function() { 
    return view('/list_hosts'); 
})->middleware('admin'); 

遺憾的是還沒有管理員可以查看站點。有什麼建議麼?

+0

系統如何知道用戶是否具有管理權限? – Onix

+0

相關:http://stackoverflow.com/questions/34614753/can-anyone-explain-laravel-5-2-multi-auth-with-example –

+1

是不是你有機會陷入與重定向的無限循環?中間件永遠將管理員重定向到自己,不是嗎? –

回答

1

首先你的中間件應該在每種情況下都返回一些東西。在你的例子中,當你的第一個失敗時,不再有任何回報。

第二個問題是您的中間件重定向到路由/list_hosts,這會導致自身發生無限循環。

嘗試使用這個

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

關:但是我非常reccomend使用括號如果每次經過statetement,即使你有內只有一條線。

+0

謝謝解決它。我愚蠢地使用auth-Middleware創建另一條路由,所以它沒有使用我的。 :d – AppleForTheKing