2017-04-25 46 views
1

我試圖使用不同中間件的相同控制器的一些方法,例如讓管理員和用戶使用方法索引並在同一個控制器中創建。所以我做了一名管理員後衛作爲用戶後衛。多個控制器中間件在Laravel 5.2中使用相同的方法

這是我AdminMidleware

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Auth; 

class AdminMidleware 
{ 

    public function handle($request, Closure $next) 
    { 
     if (Auth::guard('admin')->guest()) { 
      if ($request->ajax() || $request->wantsJson()) { 
       return response('Unauthorized.', 401); 
      } else { 
       return redirect()->guest('/'); 
      } 
     } 

     return $next($request); 
    } 
} 

我UserMiddleware

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Auth; 

class UserMiddleware 
{ 

    public function handle($request, Closure $next) 
    { 
     if (Auth::guard('user')->guest()) { 
      if ($request->ajax() || $request->wantsJson()) { 
       return response('Unauthorized.', 401); 
      } else { 
       return redirect()->guest('/'); 
      } 
     } 

     return $next($request); 
    } 
} 

他們都是在kernel.php在$ routeMiddleware

'admin' => \App\Http\Middleware\AdminMidleware::class, 
'user' => \App\Http\Middleware\UserMiddleware::class, 

如果我用這個,我可以作出這樣的只有管​​理員可以訪問這些方法,並且它可以工作,您必須將其作爲管理員才能使用我thods。

public function __construct(){ 
    $this->middleware('admin', ['only' => [ 
     'index', 
     'create', 
    ]]); 
} 

,這是假設,使用戶和管理員能夠使用索引,並創建在同一個控制器發送的第一parametter與管理員和用戶中間件陣列的方法,

public function __construct(){ 
    $this->middleware(['admin', 'user'], ['only' => [ 
     'index', 
     'create', 
    ]]); 
} 

但是,它不工作,它實際上使任何人都無法使用這些方法,你能幫我做好這個工作嗎?我究竟做錯了什麼?

回答

1

由於您的中間件是相同的,除了使用的guard之外,您可以嘗試製作一個auth中間件,該中間件模仿Laravel新版本附帶的auth中間件。這可以讓你將多個守衛作爲參數傳遞給中間件。

public function handle($request, Closure $next) 
{ 
    // get guards or use 'null' (default guard) 
    $guards = array_slice(func_get_args(), 2) ?: [null]; 

    // spin through guards to find one that checks out 
    foreach ($guards as $guard) { 
     if (Auth::guard($guard)->check()) { 
      // if we have a guard name, not null 
      if ($guard) { 
       // use this guard as the default 
       Auth::shouldUse($guard); 
      } 

      // we have an authed user from some guard move along 
      return $next($request); 
     } 
    } 

    // handle no authed user 
    if ($request->ajax() || $request->wantsJson()) { 
     return response('Unauthenticated.', 401); 
    } 

    return redirect()->guest('/'); 
} 

它會通過的所有警衛旋轉,如果其中的任何解決一個用戶,該後衛成爲默認戒備的Auth將使用。

$this->middleware('thatmiddleware:user,admin'); 

類似的東西應該工作。

+0

OMG它的工作!謝謝:D – Saucyloco

相關問題