2016-05-12 1 views
2

Я нахожусь сегодня в путанице о безопасности своего сайта и дополнительном коде, который написан, чтобы сделать сайт безопасным. Ниже приведены 2 места, где применяется защита.Какова цель метода authorize в классе Request в Laravel?

Внутри Route Config, для обеспечения маршрута я использовал Middleware для проверки роли пользователя.

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

я уже 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', 
     ]; 
    } 
} 

Вопрос: Должен ли я удалить проверку в классе Request? Это нежелательная проверка для обеспечения запроса? Поскольку route.config уже выполняет эту работу.

Какой способ авторизации? Я имел в виду, я использую класс Request для проверки ввода форм. Должен ли я всегда возвращать true из метода authorize?

ответ

2

да, вы должны удалить, что проверки в Request классе: если вы уже делаете, что проверки в вашем промежуточном слое вы не должны повторять их

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

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

Вы «сообщая laravel, что, когда он найдет маршрут /Create-Department, он должен вызвать метод этого промежуточного программного обеспечения : ['web', 'SuperAdmin'], до запрос отправляется на адрес DepartmentController

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

о цели методы authorize : метод авторизации обычно используется для авторизации фактического запроса, основываясь на некоторой политике, которую вы хотели бы уважать. Например, если у вас есть запрос на редактирование модели Post, в методе 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' для проверки входов форм. Должен ли я всегда возвращать true из метода 'authorize'? – Pankaj

+0

Я упомянул 2 'Middlewares'. 1. «Auth Middleware»: это для «аутентификации». 2. «Исходное ПО IsAdmin». Это для «Авторизация». – Pankaj

+0

В качестве дополнения удалите свое «веб-соединение» с вашего маршрута, поскольку оно автоматически вызывается в последней версии. Пожалуйста, посмотрите [здесь] (http://stackoverflow.com/questions/37069203/laravel-5-2-web-middleware-is-applied-twice) для получения более подробной информации – Abbasi

Смежные вопросы