簡體   English   中英

Laravel中Request類中authorize方法的目的是什么?

[英]What is the purpose of the authorize method in a Request class in Laravel?

我今天對我的網站安全性以及為使網站安全而編寫的一些額外代碼感到有些困惑。 以下是2個應用安全性的位置。

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

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

我提到了2個Middlewares

  1. Auth Middleware :用於authentication
  2. SuperAdmin Middleware :這是Authorization

第二個位置是請求類。 這是代碼。 在授權方法中,再次檢查同樣的事情,就像在路線中已經完成的那樣

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',
        ];
    }
}

問題:我應該刪除Check in Request類嗎? 這是一個不需要的驗證來保護請求嗎? 由於route.config已經在完成這項工作。

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

是的,您應該刪除Request類中的檢查:如果您已經在中間件中進行了檢查,則不應重復這些檢查

當你指定這個:

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

你告訴laravel,當它找到/Create-Department路由時,它應該在請求被發送到DepartmentController 之前觸發這些中間件的handle方法: ['web', 'SuperAdmin']

因此,如果您檢查中間件中的身份驗證和授權,當請求到達您的控制器時,您確定它已滿足它經歷的所有中間件

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

編輯

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

例如,從文檔中檢查此示例:

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方法中重復這些任務,但請記住,該方法的本機用途是授權特定請求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM