v2026.6.12
Fecha de lanzamiento: 30 de junio de 2026
✨ Nuevas Funcionalidades
Permisos granulares por usuario
Cada miembro de la organización puede tener un conjunto de permisos único, configurado individualmente — independiente del rol o grupo asignado.
La jerarquía de resolución es exclusiva (sin mezcla entre capas):
- Permisos personalizados del usuario — si existen, tienen prioridad total
- Grupo de permisos asignado — utilizado cuando no hay permisos personalizados
- Plantilla del rol — fallback final
Regla de oro: el rol
ownersiempre usa la plantilla completa y nunca puede ser restringido por permisos personalizados o grupos.
¿Para qué sirve?
- Conceder o restringir módulos específicos a un usuario sin cambiar su rol
- Definir si un agente ve todos los clientes/embudos o solo los que atiende
- Crear combinaciones de acceso no cubiertas por los roles predeterminados
¿Cómo configurar?
- Ve a Configuración → Miembros
- Encuentra el miembro deseado y haz clic en Permisos
- En la pestaña Permiso individual, activa los módulos y acciones deseados
- Marca o desmarca banderas especiales como "Ver todos los clientes" o "Ver todas las conversaciones"
- Guarda — los permisos entran en vigor de inmediato
Control de visibilidad de clientes y CRM
La bandera canAccessAll en los módulos Clientes y CRM determina el alcance de visión del usuario:
| Bandera | Comportamiento en sidebar | Comportamiento en filtros |
|---|---|---|
canAccessAll: true | Muestra "Los que atiendo" y "Todos" | Acceso libre |
canAccessAll: false | Muestra solo "Los que atiendo" | Filtrado automáticamente por ID propio |
Roles con visión total por defecto: owner, admin, manager, financial.
Roles con visión restringida por defecto: agent, agent_limited, sales, medical_doctor, medical_assistant.
Navegación directa al submenú único
Cuando un elemento de menú tiene submenús pero solo uno de ellos está disponible para el usuario (por permisos), el clic navega directamente a esa página — sin abrir el panel expandible.
Antes: hacer clic en "Clientes" expandía el menú, incluso con un único submenú.
Ahora: hacer clic en "Clientes" va directamente a la única opción disponible.
🔄 Cambios
Verificaciones de rol sustituidas por permisos efectivos
Todos los puntos del frontend y del backend que comparaban directamente role === 'admin' || role === 'owner' fueron migrados para usar permisos efectivos:
- Frontend:
isOwnerOrAdmin,isOwnery banderas específicas de módulo (customersPermissions.canAccessAll,chatsPermissions.canAssignToOthers) — derivadas del hookusePermissions - Backend:
req.isAdmin,req.isOwneryreq.is_superadmin— poblados en el middleware de autenticación sin consultas adicionales a la base de datos
Banderas de acceso en el middleware de autenticación
El middleware applyMembershipAuthContextToRequest ahora define req.isOwner y req.isAdmin según el rol del miembro, directamente en la capa de autenticación. Los controladores y handlers dejan de hacer consultas redundantes a la base de datos para verificar el rol del usuario que hizo la solicitud.
Protección de rutas de backend por módulo
Middleware requireModuleAccess aplicado a las rutas de: configuración, integraciones, facturación, Stripe, suscripción, grupos de permisos, equipos de atención y UTM.
Protección de rutas de frontend por módulo
Componente ModuleGuard envolviendo grupos de rutas de React Router para: financiero, informes, miembros, grupos de permisos, equipos, mensajes masivos, flujos, prompts, facturación, canales, médico, documentos, PDV, UTM y configuración.
🐛 Correcciones
Permisos personalizados ignoraban canAccessAll: false
Cuando un usuario tenía permisos personalizados definidos pero el campo canAccessAll en el módulo de clientes no estaba marcado, el sistema usaba el valor predeterminado true — mostrando incorrectamente todos los clientes. Corregido: la ausencia de la bandera en permisos personalizados ahora se trata como false (restrictivo por defecto).
🎯 Beneficios
- ✅ Control de acceso por módulo sin necesidad de crear roles específicos
- ✅ El owner nunca pierde acceso total, incluso con permisos personalizados configurados
- ✅ Sidebar y filtros se adaptan automáticamente al alcance de visión del usuario
- ✅ Navegación más fluida: sin expansión innecesaria de menús con elemento único
- ✅ Backend sin consultas adicionales: verificaciones de acceso resueltas en la capa de autenticación