2015-10-30 3 views
2

Я создал промежуточное программное обеспечение, которое проверяет, если пользователь имеет право выполнить действие и добавил промежуточное программное обеспечение для маршрутов, которые я хочу защитить, как это:В Laravel, должен ли я проверить разрешение на контроллер, если вы уже проверяете промежуточное ПО?

// VerifyPermission middleware 

class VerifyPermission { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param $permission 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $permission) 
    { 
     $user = auth()->user(); 

     if (auth()->check() && $user->hasPermission($permission)) 
     { 
      return $next($request); 
     } 

     return redirect('/'); 
    } 
} 

// Routes 

Route::patch('company/{id}', ['as' => 'updateCompany', 
           'uses' => '[email protected]', 
           'middleware' => 'permission:manage_company'] 
); 

Моего вопрос, является необходимым, чтобы сделать еще один чек на updateCompany или проверка промежуточного ПО достаточна?

public function updateCompany() 
{ 
    if(Auth::user()->hasPermission('manage_company')) 
    { 
     // Updates Company 
    } 

    return abort(403, "Unauthorized"); 
} 
+0

Действие контроллера будет выполняться после промежуточного программного обеспечения. Так что это не нужно. – Szenis

ответ

4

Нет, вы не должны делать еще одну проверку, промежуточное программное обеспечение это сделает.

В обработке аутентификации и обработки разрешения факта является одной из наиболее частых применений промежуточного

при указании этого:

Route::patch('company/{id}', ['as' => 'updateCompany', 
          'uses' => '[email protected]', 
          'middleware' => 'permission:manage_company'] 

Вы говорите Laravel, что, когда он находит company/{id} маршрут, он должен вызвать handle метод permission:manage_company промежуточного слоя, перед тем запрос отправляется на SettingsController

Итак, когда запрос поступит на ваш контроллер, вы убедитесь, что он удовлетворил все промежуточное ПО, которое оно прошло