php: ¿Cuál es el propósito del método de autorización en una clase de Solicitud en Laravel?

Hoy estoy en un poco de confusión sobre la seguridad de mi sitio web y algunos códigos adicionales que están escritos para hacer que el sitio sea seguro. A continuación se muestran 2 lugares donde se aplica la seguridad.

Dentro de la configuración de ruta, para asegurar la ruta, he usado Middleware para verificar el rol del usuario.

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

Mencioné 2 Middlewares.

  1. Auth Middleware : This is for authentication.
  2. SuperAdmin Middleware: This is for Authorization.

La segunda ubicación es la clase de solicitud. Aquí está el código. En el método de autorización, una vez más se está comprobando que ya se hizo en la ruta

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

Pregunta: ¿Debo eliminar el cheque en la clase de solicitud? ¿Es esa una validación no deseada para asegurar la solicitud? Como route.config ya está haciendo el trabajo.

¿Para qué sirve el método de autorización? Quiero decir, estoy usando la clase de solicitud para validar entradas de formulario. ¿Debo siempre devolver el verdadero método de autorización?

Mejor respuesta
sí, debe eliminar las comprobaciones en la clase Solicitud: si ya está haciendo las comprobaciones en su middleware, no debe repetirlas

Cuando especifique esto:

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

Le está diciendo a laravel que, cuando encuentra una ruta / Crear-Departamento, debe activar el método de manejo de estos middleware: [‘web’, ‘SuperAdmin’], antes de que se envíe la solicitud al DepartmentController

Por lo tanto, si comprueba la autenticación y la autorización en los middlewares, cuando la solicitud llegue a su controlador, está seguro de que ha satisfecho todo el middleware que recibió.

Con respecto al propósito del método de autorización: el método de autorización se utiliza generalmente para autorizar la solicitud real basándose en alguna política que le gustaría respetar. Por ejemplo, si tiene una solicitud para editar un modelo de publicación, en el método de autorización debe verificar que el usuario específico que intenta editar la publicación tiene los permisos para hacerlo (por ejemplo, es el autor de la publicación).

EDITAR

Incluso si desea utilizar un middleware para su autorización, está bien. De todos modos, por lo general, el método de autorización dentro de las solicitudes de formulario se utiliza para realizar verificaciones de autorización en la solicitud específica.

Por ejemplo, verifique este ejemplo del 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));
} 

En conclusión: si está realizando sus tareas de autenticación y autorización en middlewares, no necesita repetirlas en el método de autorización, pero tenga en cuenta que el propósito nativo del método es autorizar la solicitud específica.

Por favor indique la dirección original:php: ¿Cuál es el propósito del método de autorización en una clase de Solicitud en Laravel? - Código de registro