2016-05-20 13 views
0

私は3つのカスタムミドルウェア、すなわちRedirectIfNotAdmin,RedirectIfNotStartup,RedirectIfNotInvestorを作成しました。それぞれルート上に複数のミドルウェアを適用するlaravel

ミドルウェアコード:

class RedirectIfNotAdmin 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $user = Auth::user()->user_type; 
     if ($user != 'admin') { 
      return response('Unauthorized.', 401); 
     } 

     return $next($request); 
    } 
} 


class RedirectIfNotStartup 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $user = Auth::user()->user_type; 
     if ($user != 'startup') { 
      return response('Unauthorized.', 401); 
     } 
     return $next($request); 
    } 
} 


class RedirectIfNotInvestor 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $user = Auth::user()->user_type; 
     if ($user != 'investor') { 
      return response('Unauthorized.', 401); 
     } 
     return $next($request); 
    } 
} 

ルート:

Route::group(array('namespace' => 'UserControllers'), function(){ 
    Route::group(['middleware' => ['auth', 'admin', 'startup', 'investor']], function() { 
     Route::any('showidea/{id}', ['as' => 'showidea', 'uses' => '[email protected]']); 
     Route::get('community', '[email protected]'); 
     Route::post('communities', '[email protected]'); 
     Route::get('edit/{id}', ['as' => 'edit', 'uses' => '[email protected]']); 
     Route::get('delete/{id}', '[email protected]'); 
     Route::post('update/{id}', ['as' => 'update', 'uses' => '[email protected]']); 
     Route::any('create', '[email protected]'); 
     Route::post('idea', '[email protected]'); 
     Route::get('users', '[email protected]'); 
     Route::get('deleteUser/{id}', '[email protected]'); 
     Route::get('delete/idea/{id}', '[email protected]'); 
     Route::get('approve/{id}', '[email protected]'); 
     Route::get('edit/idea/{id}', [ 'as' => 'edit/idea', 'uses' => '[email protected]']); 
     Route::post('update/idea/{id}', [ 'as' => 'update/idea', 'uses' => '[email protected]']); 
    }); 
}); 

私が直面しています問題はそれだけで、他の2 middlewaresRedirectIfNotAdminミドルウェアに入るとされていない、ということです。それはunauthorized` startupinvestor. But it is applying管理middleware on every route and returns the responseのために作られたルートを承認する必要があり

カーネルファイル:

protected $routeMiddleware = [ 
     'auth' => \App\Http\Middleware\Authenticate::class, 
     'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
     'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
     'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
     'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class, 
     'investor' => \App\Http\Middleware\RedirectIfNotInvestor::class, 
     'startup' => \App\Http\Middleware\RedirectIfNotStartup::class 
    ]; 
} 
+0

typeミドルウェアを使用して、次のミドルウェアは明らかに適用されません。 – Arcesilas

+0

ミドルウェアの順序を変更する必要がありますので、['auth'、 'startup'、 'investor'、 'admin'] –

+0

注文を変更しましたが、今度は致命的なエラーを表示しています >致命的なエラー:クラス 'App \ Http \ Middleware \ Auth'が見つかりませんでした@Robin Dirksen –

答えて

0

は、ミドルウェア・グループを使用して試してみて、これらのミドルウェアが同一であることから、代わりにそれらを分離する1つのミドルウェアを使用し、何かのように:あなたのKernel.phpあなたのミドルウェアを登録し、新しいグループを作成するには

class RedirectIfNotUserType 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $type = null) 
    { 
     $user = Auth::user()->user_type; 
     $type = explode('|', $type); 

     if (! in_array($user, $type)) { 
      return response('Unauthorized.', 401); 
     } 

     return $next($request); 
    } 
} 

/** 
* The application's route middleware groups. 
* 
* @var array 
*/ 
protected $middlewareGroups = [ 
    ... 

    'type' => [ 
     'auth', 
     'type:admin|investor|startup', 
    ], 
]; 

/** 
* The application's route middleware. 
* 
* These middleware may be assigned to groups or used individually. 
* 
* @var array 
*/ 
protected $routeMiddleware = [ 
    ... 

    'type' => \App\Http\Middleware\RedirectIfNotUserType::class, 
]; 

そして、あなたはリダイレクトを返したら、あなたのroutes.php

Route::group(array('namespace' => 'UserControllers'), function(){ 
    Route::group(['middleware' => 'type'], function() { 
     ... 
    }); 
}); 
関連する問題