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
authpara 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.