Ir al contenido

Guías

Multi-tenant

Cómo Inspow aísla los datos por organización (tenant).

Inspow es multi-tenant: cada Organización (en el código, tenant) opera aislada. Sus datos (Usuarios, Beneficiarios, Suscripciones, Planes, Facturas, Registros de Asistencia, Menús de Comida) pertenecen a una sola organización y nunca se mezclan con los de otra.

La organización no se toma de una cabecera del cliente, sino de una credencial verificada. El middleware acepta dos formas en Authorization:

  • JWT (Bearer <token>): el tenant_id se lee del token.
  • API Key (token con prefijo ak_): se valida la clave y se resuelve su organización.

El subdominio puede aportar una pista del slug, pero por sí solo no da acceso: sin credencial válida no hay tenant_id.

El acceso depende del estado (status) de la organización:

EstadoValorAcceso a la API
PruebatrialPermitido mientras no expire el periodo; vencida → HTTP 402 (SAAS_ACCOUNT_LOCKED)
ActivaactivePermitido
SuspendidasuspendedBloqueado: HTTP 402 (SAAS_ACCOUNT_LOCKED) si la pausa es por pago de la cuenta; HTTP 503 en otros casos
CerradaclosedBloqueado de forma permanente (HTTP 403)

Una organización nueva nace en trial con 14 días de prueba; al expirar, la API responde 402 hasta que la cuenta regularice su Plan.

El tipo de organización lo define el campo vertical. En la API las personas atendidas son siempre beneficiarios (beneficiaries); lo que cambia es cómo los llama la app:

  • Gimnasio (gym): Miembros
  • Colegio (school): Beneficiarios
  • Academia (academy): Estudiantes
  • Club (club): Socios
  • Coworking (coworking): Coworkers
  • Clínica (clinic): Pacientes

Las operaciones sobre /tenants requieren admin:tenants (super-admin), salvo la lectura del propio tenant:

MétodoRutaPermiso
POST/tenantsadmin:tenants
GET/tenantsadmin:tenants
GET/tenants/:idread:tenant-info (solo el propio)
PATCH/tenants/:idadmin:tenants
POST/tenants/:id/suspendadmin:tenants
POST/tenants/:id/activateadmin:tenants
DELETE/tenants/:idadmin:tenants (cierre lógico)
GET/tenants/:id/preferencesread:tenant-preferences
PATCH/tenants/:id/preferencesupdate:tenant-preferences
GET/tenants/:id/feature-flagsread:tenant-features
PATCH/tenants/:id/feature-flagsadmin:tenants

El borrado es un cierre lógico: pasa la organización a closed, no elimina los datos.