Middleware de roles
Este middleware permite restringir el acceso a rutas basándose en el rol principal del usuario (user.rol) y, opcionalmente, en su rol dentro de un equipo (user.rolEquipo). También permite verificar si el usuario pertenece al tipo EMPRESARIAL.
🔍 Ubicación
src/middleware/roles.middleware.ts
📌 Propósito
Limitar el acceso a ciertas rutas a:
- Usuarios con roles específicos (ej.
ADMIN,EMPRESARIAL,EQUIPO, etc.) - Usuarios de tipo empresarial, si se requiere
- Usuarios de equipo con roles específicos dentro del equipo (opcional)
📥 Importaciones
import { Response, NextFunction } from "express";
import { AuthenticatedRequest } from "./token.middleware";
AuthenticatedRequestTockenes una extensión deRequestque incluye la propiedaduser, añadida previamente por el middleware de autenticación (token.middleware).
🧠 Firma del middleware
permitirRolesYRolEquipo(
rolesPermitidos: string[],
rolesEquipoPermitidos?: string[],
requiereTipoEmpresarial = false
)
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
rolesPermitidos | string[] | Lista de roles principales autorizados para acceder a la ruta. |
rolesEquipoPermitidos | string[]? | (Opcional) Lista de roles válidos para usuarios del tipo EQUIPO. |
requiereTipoEmpresarial | boolean | (Opcional) Si se requiere que el usuario sea del tipo EMPRESARIAL. Por defecto es false. |
✅ Ejemplo de uso
import { permitirRolesYRolEquipo } from "../middleware/roles.middleware";
// Solo ADMIN y EMPRESARIAL pueden acceder
router.post(
"/crear-usuario",
permitirRolesYRolEquipo(["ADMIN", "EMPRESARIAL"], ["editor", "admin"], true),
controlador.crearUsuario
);
⚠️ Respuestas de error posibles
| Código | Mensaje | Situación |
|---|---|---|
| 403 | "Acceso no autorizado" | No hay información del usuario en la petición. |
| 403 | "Rol no permitido" | El user.rol no está en la lista de roles permitidos. |
| 403 | "Acceso denegado. Solo las empresas..." | El usuario no es del tipo EMPRESARIAL y se requiere. |
| 403 | "Rol de equipo no permitido" | El user.rol es EQUIPO, pero no tiene el rol dentro del equipo adecuado. |
🧪 Flujo de ejecución
- Se verifica que
req.userexista. - Se valida si el rol principal (
user.rol) está permitido. - Si se requiere, se valida que el
tipoUsuarioseaEMPRESARIAL. - Si el rol es
EQUIPO, se valida que tenga unrolEquipoautorizado. - Si todo es válido, se ejecuta
next()para continuar con la siguiente función en la ruta.
🧩 Dependencias
Este middleware depende del middleware de autenticación que añade req.user, generalmente implementado en:
token.middleware.ts