2016-05-12 35 views
2

我今天對我的網站安全性和一些額外的代碼有點混淆,這些代碼是爲了使網站安全而編寫的。以下是應用安全性的2個位置。Laravel的Request類中授權方法的用途是什麼?

內部路由配置,爲了保護路由,我使用中間件來檢查用戶角色。

Route::group(['middleware' => ['web', 'SuperAdmin', 'auth']], function() { 
    Route::get('/Create-Department', '[email protected]'); 
}); 

我提到的2 Middlewares

  1. Auth Middleware:這是authentication
  2. SuperAdmin Middleware:這是爲Authorization

第二個位置是Request類。這是代碼。在授權的方法,再在路線已經完成正在檢查同樣的事情

class DepartmentRequest extends Request 
{ 
    public function authorize() 
    { 
     if(\Auth::user() == null) { 
      return false; 
     } 
     if(\Auth::user()->isSuperAdmin()) { 
      return true; 
     } 
     return false; 
    } 

    public function rules() 
    { 
     return [ 
      'Department' => 'required', 
     ]; 
    } 
} 

問題:我應該刪除支票Request類?這是不需要的驗證來確保請求的安全嗎?由於route.config已經在做這項工作。

授權方法的用途是什麼?我的意思是,我使用Request類來驗證表單輸入。我應該總是從授權方法返回true嗎?

回答

2

是的,你應該刪除在Request類檢查:如果你已經在做,在你的中間件檢查,你不應該重複他們

指定此:

Route::group(['middleware' => ['web', 'SuperAdmin']], function() { 
    Route::get('/Create-Department', '[email protected]'); 
}); 

你「重新告訴laravel的是,當它找到一個/Create-Department路線,應該觸發這些中間件的handle方法:['web', 'SuperAdmin']之前該請求被髮送到DepartmentController

所以,如果你檢查認證和授權的中間件,當請求將獲得你的控制器你確定它已經滿足了所有它通過

去中間件關於authorize方法的目的:授權方法通常用於根據您想要尊重的某個策略授權實際的請求。例如,如果您有編輯帖子模型的請求,請在authorize方法中檢查嘗試編輯帖子的特定用戶是否有權執行此操作(例如,作爲帖子的作者)

EDIT

即使您想使用中間件進行授權,也沒關係。無論如何,通常表單請求中的authorize方法用於對特定請求進行授權檢查。

例如檢查從docs這個例子:

public function authorize() 
{ 
    $postId = $this->route('post'); 

    //here the authorization to edit the post is checked through the Gate facade 
    return Gate::allows('update', Post::findOrFail($postId)); 
} 

結論:如果你在中間件做你的身份驗證和授權的任務,您不必重複它們在authorize的方法,但請記住,該方法的本地目的是授權特定請求

+0

'authorize'方法的用途是什麼?我的意思是,我使用'Request'類來驗證表單輸入。我應該總是從'authorize'方法返回true嗎? – Pankaj

+0

我提到過2個'Middlewares'。 1.'Auth Middleware':這是''認證'。 2. IsAdmin中間件。這是用於授權的。 – Pankaj

+0

作爲一個附加組件,從您的路由中刪除您的'web'中間件,並在最新版本中自動調用它。請看看[這裏](http://stackoverflow.com/questions/37069203/laravel-5-2-web-middleware-is-applied-twice) – Abbasi

相關問題