Roles y permisos
Catálogo de permisos (CASL), los 6 roles por defecto y cómo crear un rol personalizado.
Valwisp usa un sistema de autorización de dos capas: roles legacy (enum UserRole) y un
sistema dinámico basado en CASL respaldado por base de datos. Ver
Desarrolladores → Autenticación para el detalle técnico
de los guards; esta página se enfoca en el catálogo de permisos y cómo operarlo.
Catálogo de permisos
permission-catalog.ts define ~137 permisos (code, module, action, description),
organizados por módulo (clients, services, invoices, payments, routers, naps, plans,
tickets, installations, inventory, brigades, accounting, valstaff, valchat, etc.). Es la
fuente única de verdad — se siembra en la tabla Permission de cada tenant.
Roles por defecto y su alcance real
| Rol | Alcance |
|---|---|
| Super Admin | Acceso total (manage all), bypass de cualquier chequeo. |
| Admin | Todos los permisos del catálogo — en la práctica, equivalente a Super Admin. |
| Operator | Clientes, servicios, facturas (lectura+creación, no anular), pagos, routers (lectura+conectar), NAPs, planes (lectura), tickets, instalaciones, inventario, brigadas, combustible, contratos, hotspot, anuncios, servicios adicionales, VoIP, sucursales, cajas, plantillas, dashboard, ValChat inbox+mi-panel. Sin acceso: settings, roles, usuarios (solo lectura), Contabilidad, ValStaff, flujos/agentes/panel de ValChat. |
| Collector | Clientes (lectura), facturas (lectura), pagos (lectura+registrar), ponches propios, contratos (lectura), hotspot, sucursales, cajas (ciclo completo), plantillas, dashboard. |
| Technician | Clientes (lectura), servicios (lectura/editar/provisionar), routers (lectura+conectar), NAPs (lectura), tickets, instalaciones, inventario, brigadas (lectura+GPS), combustible, ponches propios, plantillas, dashboard. |
| Readonly | Solo lectura de los módulos operativos (clientes, servicios, facturas, pagos, routers, NAPs, planes, tickets, instalaciones, inventario, brigadas, combustible, contratos, plantillas, dashboard, ValChat inbox+mi-panel). |
Contabilidad y ValStaff son solo Super Admin/Admin por defecto en los 6 roles fijos — para dar acceso a otro perfil (ej. un contador externo), crea un rol personalizado en vez de modificar el default de Operator.
Crear un rol personalizado
Desde Ajustes → Roles (dashboard), un Admin puede crear un rol nuevo combinando
libremente cualquier permiso del catálogo. Técnicamente, esto crea una fila Role +
RolePermission en base de datos; CaslAbilityFactory.createForUser() construye la
Ability del usuario a partir de ahí, con caché en Redis (ability:{roleId}, TTL 300s).
Al modificar los permisos de un rol ya asignado a usuarios, invalida el caché (
invalidateRole(roleId)) o espera el TTL de 5 minutos — si no, los usuarios con ese rol seguirán operando con los permisos viejos hasta que expire la caché.
Sub-permisos granulares (ejemplo: ValChat)
Algunos módulos exponen permisos más finos que "todo o nada" — ValChat, por ejemplo, tiene
valchat-inbox, valchat-flows, valchat-tools, valchat-settings, valchat-panel,
valchat-mypanel, valchat-agents, valchat-channels como códigos independientes. Un
agente de soporte normal solo necesita inbox + mypanel.