Resumen de administración
La sección Admin es donde se configura una organización. Aparece en la
navegación izquierda solo para miembros cuyo OrgMember.role es admin o superadmin
(los managers obtienen una vista reducida solo de Usuarios). Cada cambio aquí surte efecto
a nivel org e inmediatamente — no hay entorno de staging.
Las rutas están montadas bajo /admin/* y protegidas por orgRoleGuard. Si llegas
a una página con el rol incorrecto serás redirigido al dashboard.
Secciones
| Sección | Ruta | Gestiona | Rol mínimo |
|---|---|---|---|
| Organizaciones | /admin/org | Perfil de la org, logo, contacto, plan | admin |
| Usuarios | /admin/users | Miembros, invitaciones, cambios de rol | manager |
| Roles | /admin/roles | RBAC integrado y personalizado | superadmin |
| Equipos | /teams | Sub-unidades, líderes, canales PTT | admin |
| Sedes | /admin/venues | Sitios con nombre y polígonos de límite | admin |
| Activos | /admin/assets | Vehículos, radios, baterías, equipo | admin |
| Webhooks | /admin/webhooks | Integraciones HTTP salientes | admin |
| Workflows | /admin/workflows | Automatizaciones trigger → condición → acción | admin |
| Gestión de DJI | /admin/dji | Docks emparejados, firmware, FlySafe, logs | admin |
| Suscripción | /admin/subscription | Nivel de plan y feature flags | superadmin |
Selector de org
Si tu cuenta pertenece a más de una org, un selector se sitúa en la parte superior derecha
de cada página de admin. Escribe en OrgService.activeOrgId y cada lista en
la página se re-consulta contra la org seleccionada.
Log de auditoría
Cada escritura de admin emite un evento admin.* al stream de auditoría de la org (por
ejemplo admin.user.invited, admin.role.updated, admin.webhook.created,
admin.dji.dock.unpaired). En los planes Command y Sovereign estos
eventos se escriben al log de auditoría inmutable (respaldado por WORM); en Tactical
se rotan después de 180 días; Guardian mantiene un buffer circular básico de 30 días.
Ver la página de Suscripción para la retención por nivel de plan.
Quién puede leer vs. escribir
Las páginas de admin siguen mayormente la misma regla: cualquiera con el rol correcto ve la
vista de lectura completa, pero las acciones de mutación (Guardar, Invitar, Eliminar, Desemparejar, Regenerar
secreto, etc.) están protegidas una segunda vez por las reglas de Firestore en
firestore.rules. Un usuario degradado a mitad de sesión aún puede ver la página pero
recibirá toasts “permission-denied” en cualquier escritura.
Algunas acciones tienen una protección extra sobre el rol:
- Los cambios de plan son exclusivos de
superadminy se reflejan a/organizations/{orgId}.plan. - La creación de roles personalizados requiere el plan Command o superior (la página muestra un candado y un hint de actualización en planes inferiores).
- Desactivar una org requiere que escribas el nombre de la org para confirmar.
- Desemparejar un dock de DJI requiere un segundo clic en el popover de confirmación.
Convenciones
- TACLINK es el tejido en tiempo real (audio, vídeo, PTT, telemetría). Verás
contadores de minutos
taclink.*en la página de Suscripción. - Las rutas de Firestore usan el prefijo
/organizations/{orgId}/...para todo lo delimitado por org. Los webhooks son la excepción (/webhooks/{id}con un campoorgId). - Todos los formularios persisten con una confirmación de toast; no hay un “guardar borrador” separado — cerrar el formulario sin hacer clic en Guardar descarta los cambios.
- Las acciones destructivas usan el estilo rojo
tac-btn--dangery requieren un clic de confirmación mediante popover.