2017-08-05 121 views
0

我正在使用laravel中的中間件。我有兩個中間件,一個是管理員,另一個是專員如何在laravel中爲多種類型的管理員使用中間件?

現在,在這兩個中間件中,一些路由訪問這兩個中間件,有些則不是。現在發生什麼事情是我想讓管理中間件的個人路由不能在委員中間件中被訪問。 在這裏,我曾嘗試: -

//Admin Middleware Route 
Route::group(["middleware" => ['admin']], function() { 
    Route::match(['get', 'post'], '/admin/users', '[email protected]'); 
}); 
//Commissioner Middleware Route 
Route::group(["middleware" => ['commissioner']], function() { 
//we can put later on these routes 
}); 

// common middleware routes between commissioner and admin 
Route::group(["middleware" => ['admin','commissioner']], function() { 
    Route::match(['get', 'post'], '/admin/dashboard', '[email protected]'); 
    Route::match(['get', 'post'], '/admin/profile', '[email protected]'); 
}); 

現在,當我訪問AdminController @用戶路線,當我通過專員登錄就可以訪問,但我想這條路線不是在當局長登錄訪問。但AdminController @儀表盤AdminController @輪廓應該可以訪問兩個中間件

When admin login then type is : master 
when commsioner login then type is : commissioner 

// Commissioner Middleware 
class Commissioner 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    if(empty(Session::has('adminSession'))){ 
     return redirect()->action('[email protected]')->with('flash_message_error', 'Please Login'); 
    } 
    return $next($request); 
} 
} 

// admin Middleware 
class Admin 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    if(empty(Session::has('adminSession'))){ 
     return redirect()->action('[email protected]')->with('flash_message_error', 'Please Login'); 
    } 
    return $next($request); 
} 
} 

請幫助我,我現在用laravel 5.2。感謝advnace :)

+0

爲什麼你的專員中間件檢查「Session :: has('adminSession')」,這是一個錯字?它應該是「Session :: has('commissionerSession')」嗎? – yixiang

+0

不,這是管理員因爲commsioner也保存在管理表中,並有不同的類型 – kunal

回答

1

如果我正確理解你的問題,你有一個管理表,其中包含兩種不同類型的管理員:主和專員。 這兩種類型的管理員都通過調用AdminController @ login方法登錄。您想使用中間件來檢查管理員的類型以保護您的路線。

下面是我的建議:

  1. 創建三個不同的中間件:
    • AdminAuth中間件(給它一個名字在HTTP/Kernel.php以 「admin」)進行身份驗證檢查主機和專員。
    • 主中間件(在Http/Kernel.php中命名爲「主」)檢查主類型管理員。
    • 專員中間件(在Http/Kernel.php中命名爲「委員」)檢查委員類型管理員。

中間件:

class AdminAuth 
{ 
    public function handle($request, Closure $next) 
    { 
     if(!Session::has('adminSession')){ 
      return redirect()->action('[email protected]')->with('flash_message_error', 'Please Login'); 
     } 
     return $next($request); 
    } 
} 

class Master 
{ 
    public function handle($request, Closure $next) 
    { 
     $admin = ... // Your code to retrived authenticated admin instance. 
     if($admin->type !== 'master') { // I assume you have a type field. 
      // return error here to indicate user is not a master 
     } 
     return $next($request); 
    } 
} 

class Commissioner 
{ 
    public function handle($request, Closure $next) 
    { 
     $admin = ... // Your code to retrived authenticated admin instance. 
     if($admin->type !== 'commissioner') { // I assume you have a type field. 
      // return error here to indicate user is not a commissioner 
     } 
     return $next($request); 
    } 
} 
  • 更新路線象下面這樣:
  • 途徑:

    //Admin Middleware Route can only be accessed by master admin 
    Route::group(["middleware" => ['admin', 'master']], function() { 
        Route::match(['get', 'post'], '/admin/users', '[email protected]'); 
    }); 
    
    //Commissioner Middleware Route 
    Route::group(["middleware" => ['admin', 'commissioner']], function() { 
        //we can put later on these routes 
    }); 
    
    // common middleware routes between commissioner and admin 
    Route::group(["middleware" => ['admin']], function() { 
        Route::match(['get', 'post'], '/admin/dashboard', '[email protected]'); 
        Route::match(['get', 'post'], '/admin/profile', '[email protected]'); 
    }); 
    

    順便說一句,中間件是「AN」 D「關係。假設你有以下聲明中您的路線:

    "middleware" => ['admin', 'commissioner']

    這意味着航線只有當你通過這兩個「管理」和「關」檢查進行訪問。

    +0

    感謝您的努力。它幫助到我 – kunal

    相關問題