Saltar al contenido principal

Autenticación y autorización

Laravel incluye sistemas integrados para autenticación y autorización, lo que permite controlar el acceso a rutas y recursos según la identidad y los permisos de los usuarios. Estas herramientas facilitan implementar seguridad de manera consistente y siguiendo buenas prácticas.

Autenticación

Laravel ofrece scaffolding para autenticación con comandos Artisan y paquetes oficiales como Laravel Breeze o Laravel Jetstream. Esto permite manejar registro, inicio de sesión, recuperación de contraseña y verificación de correo electrónico.

Ejemplo básico de middleware de autenticación en rutas:

Route::middleware('auth')->group(function () {
Route::get('/perfil', function () {
return 'Perfil del usuario autenticado';
});

Route::get('/dashboard', function () {
return 'Panel de administración';
});
});

Autorización

La autorización permite definir qué acciones puede realizar un usuario autenticado. Laravel proporciona policies y gates:

Uso de Gates

use Illuminate\Support\Facades\Gate;

Gate::define('eliminar-usuario', function ($user, $usuario) {
return $user->rol === 'admin';
});

Route::delete('/usuarios/{id}', function ($id) {
$usuario = Usuario::findOrFail($id);

if (Gate::denies('eliminar-usuario', $usuario)) {
return response()->json(['mensaje' => 'No autorizado'], 403);
}

$usuario->delete();
return response()->json(null, 204);
});

Uso de Policies

Se crean policies para agrupar la autorización de un modelo específico:

php artisan make:policy UsuarioPolicy --model=Usuario

Ejemplo de método en la policy:

public function eliminar(User $user, Usuario $usuario)
{
return $user->rol === 'admin';
}

En el controlador o ruta:

$this->authorize('eliminar', $usuario);

Buenas prácticas y convenciones

  • Separar la autenticación (identificación de usuarios) de la autorización (permisos).
  • Usar middleware auth para proteger rutas.
  • Implementar policies para la autorización de modelos y acciones específicas.
  • Evitar lógica de autorización directa en controladores; delegar a policies o gates.
  • Mantener roles y permisos bien definidos y consistentes en toda la aplicación.