Cómo invitar un usuario a la organización
Añade a la organización activa uno o varios usuarios que ya existen en el directorio, dejándolos como Invitado y generando la notificación de invitación cuando corresponde.
En este artículo
Este flujo sirve para incorporar a Grupo Marea Demo usuarios que ya existen en el directorio. No crea cuentas por email ni asigna roles: solo crea o actualiza la membresía de organización en estado Invitado.
El responsable de acceso empieza en la pestaña Usuarios de organización, busca por nombre o email y selecciona candidatos disponibles del directorio antes de enviar la invitación.
Antes de empezar
- Sesión autenticada en Grupo Marea Demo con la organización activa seleccionada.
- Permiso `users:view` para abrir la pestaña Usuarios y `users:manage` para ver `Invitar usuario`, buscar en el directorio y enviar invitaciones.
- Al menos un usuario no interno ya creado en el directorio y localizable por nombre o email.
- Texto de búsqueda introducido en el modal; con el campo vacío no se cargan candidatos.
Instrucciones
- 1.
Abrir Usuarios de organización
Entra en `organization/access?tab=users` con Grupo Marea Demo seleccionado. La tabla consulta usuarios de la organización cuando hay `selectedOrgId` y permiso de vista; con `users:manage`, la cabecera muestra `Invitar usuario`.
- 2.
Abrir el modal de invitación
Pulsa `Invitar usuario`. La app abre `Invitar usuarios` con el campo `Buscar por nombre o email`, los contadores de seleccionados y disponibles, y el botón `Invitar` deshabilitado hasta que marques al menos un candidato.
- 3.
Buscar y marcar candidatos
Escribe parte del nombre o email. La interfaz recorta el texto, espera el debounce y consulta el directorio solo si el modal sigue abierto, la organización está seleccionada y el usuario tiene `users:manage`. Selecciona uno o varios usuarios existentes.
- 4.
Enviar la invitación
Con candidatos marcados, pulsa `Invitar (n)`. La UI envía `user_ids` y `status` con valor `invited` a `POST /api/app/{orgId}/users`; el backend crea o actualiza la membresía en `user_organizations` como Invitado.
- 5.
Confirmar el resultado
Tras `201 Created`, el modal se cierra, aparece `Invitaciones enviadas` y la tabla se recarga. Si el usuario invitado queda dentro de la página visible, debe aparecer con estado Invitado.
Validaciones y límites
- Con `users:view` sin `users:manage`, la tabla se puede consultar pero el botón `Invitar usuario` no aparece.
- La búsqueda del directorio no se ejecuta con el campo vacío ni sin `selectedOrgId`.
- El directorio excluye usuarios con `primary_auth_provider = internal-credentials` y filtra por email o nombre completo.
- La invitación no acepta emails libres ni crea usuarios nuevos; el candidato debe existir antes en `users`.
- El botón `Invitar` queda deshabilitado sin selección o mientras la invitación se está enviando.
- `POST /api/app/{orgId}/users` exige JSON válido y al menos un `user_id` no vacío, ya sea individual o dentro de `user_ids`.
- El flujo de UI siempre envía `status` con valor `invited`; no documentes `accepted`, `remove` o estado vacío como variantes de esta acción.
- Cada `user_id` del lote se procesa por separado; si uno falla, no se procesan los siguientes.
- La notificación `organization_invite` se deduplica por usuario y organización; no se crea otra si ya existe.
- La UI solo oculta candidatos que ya están visibles en la página actual de la tabla, por lo que conviene usar un usuario temporal claramente invitable en capturas.
Resultado esperado
Los usuarios seleccionados quedan asociados a Grupo Marea Demo como Invitado, con `invited_at` actualizado y `accepted_at` limpio. Si no existía una notificación `organization_invite` para ese usuario y organización, se crea y se agenda para entrega posterior.