Organizaciones B2B Multi-Tenant
El sistema de Organizaciones habilita la multi-tenencia B2B en Auris. Cada organización representa una entidad cliente — una empresa, un equipo o cualquier agrupación lógica — que posee un conjunto de usuarios miembros, tiene sus propias asignaciones de roles y puede configurar su propio proveedor de SSO empresarial. Las organizaciones son independientes entre sí: el rol de un usuario en la Organización A no tiene ningún efecto sobre su acceso en la Organización B.
Este modelo está diseñado para productos SaaS que venden a empresas: tu único tenant de Auris aloja múltiples organizaciones de clientes, cada una con membresía y control de acceso aislados.
Conceptos Fundamentales
Organización: Una entidad con nombre y un slug único. Las organizaciones tienen metadatos, nombres de visualización y configuraciones. Siempre son propiedad de exactamente un usuario (el OWNER).
Miembro de Organización: Un usuario que pertenece a una organización con uno de cuatro roles: OWNER, ADMIN, MEMBER o VIEWER.
Invitación: Una invitación basada en token y con tiempo limitado que permite a un usuario (o una dirección de email no registrada aún) unirse a una organización con un rol especificado.
SSO con ámbito de organización: Cada organización puede configurar su propio proveedor de identidad SAML 2.0 u OIDC. Cuando un usuario inicia sesión con un email que coincide con un dominio verificado, Auris lo redirige automáticamente al IdP de su organización. Ver SSO Empresarial.
Creación de Organizaciones
Las organizaciones pueden ser creadas por cualquier usuario con el permiso adecuado, o programáticamente a través del SDK de Gestión.
/api/organizationsRequires: manage:organizationsCrea una nueva organización. Al usuario que la crea se le asigna automáticamente el rol OWNER.
Cuerpo de la solicitud:
{
"name": "Acme Corporation",
"displayName": "Acme Corp",
"slug": "acme-corp",
"metadata": {
"plan": "enterprise",
"contractId": "CNT-2025-0042"
}
}Referencia de campos:
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
name | string | Sí | Nombre interno, único por tenant |
displayName | string | No | Nombre orientado al usuario que se muestra en la interfaz |
slug | string | No | Identificador seguro para URL, se genera automáticamente desde name si se omite |
metadata | object | No | JSON arbitrario para datos específicos de la aplicación |
/api/organizationsRequires: view:organizationsDevuelve una lista paginada de todas las organizaciones en el tenant. Soporta parámetros de consulta search y page/limit.
/api/organizations/[id]Requires: view:organizationsDevuelve el registro de la organización incluyendo el recuento de miembros y la configuración básica.
/api/organizations/[id]Requires: manage:organizationsActualiza los campos de la organización. Todos los campos son opcionales — solo se actualizan los campos proporcionados.
/api/organizations/[id]Requires: manage:organizationsElimina la organización. Los miembros pierden sus asignaciones de roles a nivel de organización. Las cuentas de usuario subyacentes no se ven afectadas.
Roles de Miembros
Las organizaciones usan un sistema de roles jerárquico de cuatro niveles. Los roles superiores heredan todas las capacidades de los roles inferiores.
| Rol | Capacidades |
|---|---|
| OWNER | Control total. Puede gestionar todos los ajustes, miembros, SSO y facturación. Siempre hay exactamente un OWNER. El OWNER no puede ser eliminado por otro OWNER — la propiedad debe transferirse primero. |
| ADMIN | Puede gestionar miembros (añadir, eliminar, cambiar roles hasta ADMIN). Puede configurar SSO y ajustes de la organización. No puede eliminar la organización. |
| MEMBER | Acceso estándar. Las concesiones de roles son definidas por la aplicación — Auris no impone restricciones de recursos en este nivel más allá de lo que tu aplicación aplique. |
| VIEWER | Acceso de solo lectura. Puede ver la membresía y los ajustes de la organización pero no puede realizar cambios. |
Auris aplica la jerarquía de roles a nivel de API. Un ADMIN no puede asignar el rol OWNER a otro usuario — la transferencia de propiedad requiere una llamada API separada por parte del OWNER actual.
Gestión de Miembros
/api/organizations/[id]/membersRequires: view:organizationsDevuelve la lista paginada de miembros de la organización, incluyendo los detalles del usuario y su rol dentro de la organización.
Respuesta:
{
"data": [
{
"userId": "usr_01HX...",
"email": "[email protected]",
"firstName": "Alice",
"lastName": "Rossi",
"role": "ADMIN",
"joinedAt": "2025-01-15T10:00:00Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 12, "totalPages": 1 }
}/api/organizations/[id]/membersRequires: manage:organizationsAñade directamente un usuario (por userId) a la organización con un rol especificado. El usuario ya debe existir en Auris.
{
"userId": "usr_01HX...",
"role": "MEMBER"
}/api/organizations/[id]/members/[userId]Requires: manage:organizationsActualiza el rol del miembro dentro de la organización.
/api/organizations/[id]/members/[userId]Requires: manage:organizationsElimina al usuario de la organización. La cuenta de Auris del usuario no se elimina ni se deshabilita.
Invitaciones
Las invitaciones te permiten añadir usuarios a una organización por email, incluso si aún no tienen una cuenta de Auris. El flujo de invitación:
- Un ADMIN o OWNER envía una invitación a una dirección de email.
- Auris genera un token único y de tiempo limitado y envía un email con un enlace de aceptación.
- El invitado hace clic en el enlace. Si ya tiene una cuenta de Auris, se añade a la organización inmediatamente. Si no, se le pide que cree una cuenta, tras lo cual se acepta la invitación.
- Las invitaciones caducan después de 7 días si no se aceptan.
/api/organizations/[id]/invitationsRequires: manage:organizationsCrea y envía una invitación a una dirección de email.
{
"email": "[email protected]",
"role": "MEMBER",
"message": "Has sido invitado a unirte a Acme Corp en nuestra plataforma."
}/api/organizations/[id]/invitationsRequires: manage:organizationsLista todas las invitaciones pendientes, aceptadas y caducadas de la organización.
/api/organizations/[id]/invitations/[invitationId]Requires: manage:organizationsCancela una invitación pendiente. Las invitaciones caducadas no pueden aceptarse pero no necesitan cancelarse manualmente.
Estados de invitación:
| Estado | Significado |
|---|---|
PENDING | Enviada y esperando aceptación |
ACCEPTED | El usuario aceptó y ahora es miembro |
EXPIRED | El período de 7 días pasó sin aceptación |
CANCELLED | Cancelada manualmente por un ADMIN o OWNER |
Uso del SDK
React
import { useOrganization } from '@auris/react'
function PanelOrganizacion() {
// Devuelve el contexto de la organización de la sesión del usuario autenticado.
// La organización se deriva de los claims del access token.
const { organization, members, isLoading } = useOrganization()
if (isLoading) return <div>Cargando...</div>
if (!organization) return <div>Sin organización</div>
return (
<div>
<h1>{organization.displayName}</h1>
<p>Miembros: {members.length}</p>
<ul>
{members.map((member) => (
<li key={member.userId}>
{member.email} — {member.role}
</li>
))}
</ul>
</div>
)
}Metadatos de Organización
Al igual que los usuarios, las organizaciones admiten metadatos JSON arbitrarios. Úsalos para almacenar datos específicos de la aplicación junto al registro de la organización sin migraciones de esquema.
{
"metadata": {
"plan": "enterprise",
"contractId": "CNT-2025-0042",
"maxSeats": 250,
"billingEmail": "[email protected]",
"features": ["advanced-analytics", "custom-domains", "audit-export"]
}
}Los metadatos se devuelven en cada respuesta de la API de organizaciones y son accesibles en el SDK de Gestión.
Casos de Uso
Multi-tenencia SaaS: Cada uno de tus clientes es una organización. Tu aplicación lee la organización del usuario desde su JWT o sesión y limita todas las consultas de datos a esa organización. Los nuevos clientes se incorporan creando una organización e invitando a su administrador.
Incorporación de clientes empresariales: Crea la organización, añade al administrador de TI del cliente como OWNER y deja que gestione sus propios usuarios y configure su SSO corporativo. Tu equipo mantiene la visibilidad a nivel de tenant a través de la Consola de Administración.
Soluciones de marca blanca: Cada organización de cliente final puede configurar su propio SSO, verificación de dominio y nombre de visualización. La página de Inicio de Sesión Alojado se adapta a la marca de cada organización cuando el email de un usuario coincide con un dominio verificado.
Equipos de producto internos: Separa líneas de producto o unidades de negocio en organizaciones distintas para la gestión de roles aislada, sin mantener instancias de tenant de Auris separadas.
Permisos Requeridos
| Operación | Permiso |
|---|---|
| Listar / obtener organizaciones | view:organizations |
| Crear / actualizar / eliminar organizaciones | manage:organizations |
| Gestionar miembros | manage:organizations |
| Enviar / cancelar invitaciones | manage:organizations |
Páginas Relacionadas
- SSO Empresarial por Organización — Configura SAML 2.0 u OIDC SSO para organizaciones individuales
- Aprovisionamiento SCIM 2.0 — Automatiza la sincronización de miembros desde un IdP externo
- Roles y Permisos — RBAC a nivel de tenant que complementa los roles de organización
- Consola: Organizaciones — Guía completa de la Consola