Laravel - Autorización

En el capítulo anterior, hemos estudiado sobre el proceso de autenticación en Laravel. Este capítulo le explica el proceso de autorización en Laravel.

Diferencia entre autenticación y autorización

Antes de continuar aprendiendo sobre el proceso de autorización en Laravel, comprendamos la diferencia entre autenticación y autorización.

En authentication, el sistema o la aplicación web identifica a sus usuarios a través de las credenciales que proporcionan. Si encuentra que las credenciales son válidas, están autenticadas o no lo son.

En authorization, el sistema o la aplicación web comprueba si los usuarios autenticados pueden acceder a los recursos a los que intentan acceder o realizar una solicitud. En otras palabras, verifica sus derechos y permisos sobre los recursos solicitados. Si encuentra que pueden acceder a los recursos, significa que están autorizados.

Así, authentication implica comprobar la validez de las credenciales de usuario, y authorization implica verificar los derechos y permisos sobre los recursos que tiene un usuario autenticado.

Mecanismo de autorización en Laravel

Laravel proporciona un mecanismo simple de autorización que contiene dos formas principales, a saber Gates y Policies.

Redacción de puertas y políticas

Las puertas se utilizan para determinar si un usuario está autorizado para realizar una acción específica. Normalmente se definen enApp/Providers/AuthServiceProvider.phputilizando la fachada de la puerta. Las puertas también son funciones que se declaran para realizar el mecanismo de autorización.

Las políticas se declaran dentro de una matriz y se utilizan dentro de clases y métodos que utilizan mecanismos de autorización.

Las siguientes líneas de código le explican cómo usar Puertas y Políticas para autorizar a un usuario en una aplicación web de Laravel. Tenga en cuenta que en este ejemplo, elboot La función se utiliza para autorizar a los usuarios.

<?php

namespace App\Providers;

use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider{
   /**
      * The policy mappings for the application.
      *
      * @var array
   */
   
   protected $policies = [
      'App\Model' => 'App\Policies\ModelPolicy',
   ];
   
   /**
      * Register any application authentication / authorization services.
      *
      * @param \Illuminate\Contracts\Auth\Access\Gate $gate
      * @return void
   */
   
   public function boot(GateContract $gate) {
      $this->registerPolicies($gate);
      //
   }
}