Usuarios
Admin → Usuarios (/admin/users) es el directorio de miembros. Cualquiera con rol
manager, admin o superadmin puede abrirlo; solo admin y superior
pueden cambiar roles o eliminar miembros.
La fila de estadísticas
A lo largo de la parte superior: Total de miembros, Activos, Admins y (cuando es distinto de cero)
Pendientes. Si la org está en su límite de asientos del plan, un banner amarillo dice
“Límite de usuarios alcanzado ({n} en {plan})” y el botón Invitar usuario está
deshabilitado. Los límites de asientos vienen de ORG_PLAN_LIMITS[plan].maxUsers — por ejemplo
Guardian está limitado a 5, Tactical a 10, Command a 20, y
Sovereign es ilimitado.
Columnas de la lista
| Columna | Origen | Notas |
|---|---|---|
| Miembro | displayName, email | El avatar es la inicial de dos letras a menos que se suba una foto. |
| Indicativo | callSign | Override por org; recurre al indicativo global del asset. |
| Rol | role | superadmin, admin, manager, operator, observer — codificado por color. |
| Estado | active, pending | Haz clic en el pill para alternar activo/inactivo (no puedes deshabilitarte a ti mismo). |
| Se unió | joinedOn | Fecha en que el miembro aceptó la invitación. |
| Acciones | — | Editar perfil, cambiar rol, eliminar miembro. |
Una caja de búsqueda filtra por nombre, email o indicativo. Los filtros para rol y estado están junto a ella. Alterna el layout tabla vs tarjetas con el grupo de iconos a la derecha — la vista de tarjetas es útil en pantallas pequeñas.
Invitar un usuario
Haz clic en Invitar usuario. El panel pide:
- Email (obligatorio) — el destino del enlace de invitación.
- Rol — por defecto
operator. Puedes elegir cualquier rol en o por debajo de tu propio nivel.
Al enviar, ARGUS escribe un documento en
/organizations/{orgId}/invitations/{invId} con un token hex de 40 caracteres,
crea un puntero correspondiente /inviteTokens/{token} para búsqueda rápida y envía
un email con plantilla. La invitación expira en 7 días por defecto.
Una sección Invitaciones pendientes aparece una vez que hay al menos una invitación
abierta. Para cada fila pendiente puedes Reenviar (refresca la expiración y
re-envía el email) o Revocar (cambia status a revoked e invalida el
token).
Si Firebase no pudo despachar el email la fila muestra una insignia FAILED roja con el error como tooltip. Reenviar reintentará.
Editar un miembro
Cada fila tiene tres acciones de icono:
- Editar perfil — panel en línea para
displayName,callSigny una muestra de color (usada en el mapa y el roster PTT). Deja cualquier campo en blanco para recurrir al valor global del asset. - Cambiar rol — intercambia el select en línea y guarda con el check verde. No
puedes promover a alguien por encima de tu propio nivel y no puedes degradar al último
superadminrestante. - Eliminar miembro — confirmado por popover. Esto desactiva el documento
OrgMembery revoca su acceso a cualquier misión en la que esté actualmente. La cuenta de Firebase auth del usuario no se elimina — todavía puede iniciar sesión pero verá un selector de org vacío.
Deshabilitar vs. eliminar
| Acción | Qué ocurre | ¿Reversible? |
|---|---|---|
| Alternar Activo off | OrgMember.active = false. El usuario mantiene su invitación, historial de misiones y media subida pero no puede abrir misiones ni publicar a TACLINK. | Sí — actívalo de nuevo. |
| Eliminar miembro | Eliminación lógica del documento OrgMember. Preserva datos históricos que el usuario creó. | Re-invítalo con el mismo email. |
| Forzar re-auth (aspiracional) | Revoca los tokens de Firebase auth para que el usuario tenga que volver a iniciar sesión. Se entrega en la release de endurecimiento de auditoría del plan Command. | — |
| Purgar datos (aspiracional) | Eliminación GDPR/subject-access: elimina la PII del usuario de eventos de auditoría, transcripciones de chat e informes de misión. Planificado para Q3 2026. | No. |
Importación masiva CSV (aspiracional)
Un drawer “Invitación masiva” está en el roadmap para Q3 2026. Aceptará un CSV
con columnas email,role,callSign,displayName y creará invitaciones pendientes en
una única escritura por lotes. Hasta entonces, usa el SDK de admin de Firestore o invita
de una en una.
Asignar equipos
ARGUS modela los equipos como un concepto separado — abre Equipos para mover un usuario entre sub-unidades. Los cambios allí se reflejan inmediatamente aquí vía el contador de insignias de equipo del miembro.