Saltearse al contenido

Roles

Admin → Roles (/admin/roles) lista los cinco roles integrados y — en planes Command+ — permite a un superadmin definir roles personalizados con permisos de grano fino. La lista de roles integrados es fija; no puedes eliminarlos ni renombrarlos, solo ver lo que pueden hacer.

Solo superadmin puede abrir esta página. Cualquier otro será redirigido al dashboard por el guard de ruta.

Los cinco roles integrados

Desde OrgRole en org.ts, en privilegio descendente:

RolNivelInsigniaUso típico
superadminL1rojoPropietario de la plataforma. Ve cada org, puede cambiar plan, gestionar roles.
adminL2ámbarAdministrador de org. Invitaciones, facturación, DJI, webhooks, workflows.
managerL3cianLíder de equipo/turno. Ejecuta misiones, invita operadores, sin facturación.
operatorL4verdePiloto / usuario de campo. Se une a misiones, pilota drones, usa PTT.
observerL5grisSolo lectura. Observa feeds en vivo, no puede publicar.

ADMIN_ROLES en el código es ['superadmin', 'admin'] — esos son los dos roles que las reglas de Firestore comprueban para cualquier escritura a un documento delimitado por org fuera del perfil propio del usuario.

Matriz de capacidades

Capacidadsuperadminadminmanageroperatorobserver
Crear / desactivar orgs, cambiar plan
Invitar miembros, cambiar roles✓ (≤ propio)✓ (op/obs)
Emparejar docks DJI, crear sedes/assets
Configurar webhooks / workflows
Crear misiones, pilotar (DRC), publicar TACLINK
Suscribirse a TACLINK (escuchar/ver)
Crear roles personalizados
Exportar informes de misión

El helper roleAtLeast(role, minimum) controla funciones a lo largo del código — p. ej. roleAtLeast(me.role, 'manager') es el check para “puede iniciar una misión”.

Editar un rol integrado

Haz clic en cualquier rol integrado a la izquierda para abrir su panel de detalle. Puedes ver la lista de permisos pero Editar está deshabilitado — los integrados son el contrato en el que las reglas de Firestore confían. Si necesitas un ajuste, clónalo en un rol personalizado.

Roles personalizados (planes Command+)

Los roles personalizados se entregan en los planes Command y Sovereign; Guardian y Tactical ven un banner con candado que dice “Los roles personalizados requieren plan Command o superior”. El feature flag es PlanFeatures.customRoles y las reglas de Firestore también lo aplican en tiempo de escritura.

Crear un rol personalizado

Haz clic en Crear rol en la cabecera. El formulario pide:

  • Nombre del rol — texto libre, p. ej. SAR Team Lead.
  • Descripción — una línea mostrada en el selector de miembros.
  • Nivel de jerarquía — entero 5–99. Los números más bajos tienen más privilegio. Los integrados ocupan los niveles 1–5 por lo que los roles personalizados siempre se sitúan debajo.
  • Color — elegido de la paleta de 12 muestras. Determina el tinte de la insignia.
  • Permisos — cuadrícula de checkboxes multi-select agrupada por módulo (Misiones, Equipos, DJI, Webhooks, Informes, …). Cada permiso es una cadena {action}.{resource} como read.mission, write.flight_task, approve.workflow_step.

Guardar escribe el rol a /organizations/{orgId}/customRoles/{roleId} y se vuelve seleccionable en el selector de rol de la página de Usuarios junto con los integrados.

Asignar un rol personalizado

En Usuarios, el desplegable de rol muestra los integrados, luego un divisor, luego tus roles personalizados. Asignar uno establece OrgMember.customRoleId y deja OrgMember.role en la base integrada (por retrocompatibilidad con las reglas de Firestore). Las reglas comprueban los roles personalizados primero y recurren al rol base si el documento de rol personalizado falta.

Eliminar un rol personalizado

Confirmado por popover. Cualquier miembro que actualmente tenga el rol es automáticamente degradado al campo role base. La eliminación se registra como admin.role.deleted en el stream de auditoría.

Relacionados