🔒 Seguridad y validaciones
Archivo:
04-security.md
1. Roles y Permisos Requeridos
Aquí se especifican los roles de usuario que están autorizados para interactuar con esta feature y los permisos específicos asociados a cada operación.
AdminPrincipal
: Permite la gestión completa de recursos y reservas (CRUD total).Organizer
: Permite crear, leer y actualizar sus propias reservas, y consultar todos los recursos disponibles.
2. Claims o Scopes JWT Requeridos
Se listan los claims (afirmaciones sobre la identidad del usuario) o scopes JWT (ámbitos de acceso) que el token de autenticación debe contener para permitir el acceso a las operaciones de esta feature. Estos definen granularmente lo que un usuario puede hacer.
scope:<feature>.<acción>
scope:reservations.create
: Requerido para crear nuevas reservas.scope:reservations.read
: Requerido para consultar detalles de reservas (propias o generales, según el rol).scope:resources.read
: Requerido para consultar la lista de recursos disponibles.userId: <UUID del usuario>
: Claim para identificar al usuario que realiza la solicitud, usado en reglas de autorización por "ownership".
3. Validaciones de Entrada (Input Validations)
Esta sección describe las reglas de negocio y formato de datos que deben cumplirse para que una solicitud sea válida. Cualquier solicitud que no cumpla estas validaciones debe ser rechazada con un HTTP 400 Bad Request
.
- Campos Obligatorios: El campo
<NombreCampo>
es obligatorio y no puede ser nulo o vacío. - Formato de Fechas/Horas: Las fechas y horas (
StartTime
,EndTime
) deben seguir el formato ISO 8601 (ej.2025-07-15T10:00:00Z
) y representar un rango válido (EndTime > StartTime). - Longitud de Cadenas: El campo
<NombreCampo>
no debe exceder los 100 caracteres. - Rangos Numéricos: Los campos numéricos (
Capacity
,Quantity
) deben estar dentro de un rango permitido (ej.> 0
y< 1000
). - UUIDs Válidos: Los campos
ResourceId
yUserId
deben ser UUIDs válidos. - Estado de Reserva: El campo
Status
debe ser uno de los valores predefinidos (Pending
,Confirmed
,Cancelled
).
4. Reglas de Autorización Específicas
Aquí se detallan las reglas de negocio específicas que determinan quién puede realizar qué acción sobre los datos, más allá de los permisos básicos del claim. Esto a menudo implica verificar la relación del usuario con el recurso (ownership
).
- SCreación de Reservas: Cualquier usuario con el permiso reservations.create puede crear una reserva.
- Lectura de Reservas:
- Un
Organizer
oUser
solo puede leer sus propias reservas. - Un
AdminPrincipal
puede leer todas las reservas en el sistema.
- Un
- Modificación/Eliminación de Reservas:
- Solo el propietario de la reserva (el
UserId
de la reserva coincide con eluserId
del token) puede modificarla o eliminarla. - Un
AdminPrincipal
también puede modificar o eliminar cualquier reserva.
- Solo el propietario de la reserva (el
- Consistencia de Datos: No se puede reservar un recurso si ya está ocupado en el mismo rango de tiempo.