2015-08-16 87 views
1

我有一個管理員和用戶的共同登錄名。保護管理員和用戶路由laravel 5

user_id  role_id 
1    2 
2    1 
3    2 

其中role_id 1指的是管理和role_id 2指的是用戶。但我已經在我的表看起來像創造了一個角色。我也可以將角色附加到不同的用戶。現在我想要的是,我想保護所有管理路線和用戶路線。

例如,我不希望用戶獲得任何用於管理員的訪問權限。現在,我可以檢查用戶是管理員還是用戶,如if (Auth::user()->hasRole('admin'))if (Auth::user()->hasRole('user'))

在這種情況下,我應該如何區分用戶路由和管理路由?我應該製作自己的中間件並實施嗎?如果是這樣,如何正確實施?

回答

0

創建兩個中間件,爲管理員可以這樣做:

<?php namespace App\Http\Middleware; 

use Auth; 
use Illuminate\Contracts\Routing\Middleware; 

class CheckAdmin implements Middleware { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 

     if (Auth::user()->hasRole('admin')) 
     { 
      return $next($request); 

     } 

     throw new \Exception("Unauthorized"); 
    } 

} 

然後啓用此中間件App\Http\Kernel

protected $routeMiddleware = [ 
    'auth' = 'App\Http\Middleware\Authenticate', 
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 

    'checkAdmin' => 'App\Http\Middleware\CheckAdmin', 
]; 

您可以使用CheckAdmin middlware在routes.php文件的文件或在構造函數中你的控制器

routes.php你可以做:

Route::group(['middleware' => 'checkAdmin'], function() { 

    Route::get('admin/profile', function() { 
     // Uses CheckAdmin Middleware 
    }); 
}); 
+0

@ dynamic.if你回答這個問題你可以發貼嗎?http://stackoverflow.com/questions/32177178/how-to-show-404-page-if-route-not-found-in- laravel – vision