Permisos y Control de Acceso
Resumen
Corcava implementa un sistema integral de control de acceso basado en roles que asegura que los miembros del equipo tengan acceso apropiado a proyectos, tableros y tareas mientras mantiene seguridad y aislamiento de datos. Basado en análisis del código, el sistema usa una combinación de roles de usuario, verificación de permisos y aislamiento basado en equipos para controlar el acceso a las características de gestión de proyectos.
Entender el sistema de permisos te ayudará a configurar correctamente el acceso del equipo y mantener la seguridad apropiada para tus proyectos y datos de clientes.
Acceso Basado en Roles - Diferentes Roles de Usuario y Capacidades
Sistema de Roles de Usuario
Roles Disponibles: Basado en análisis del código, el sistema implementa 7 roles de usuario distintos:
1. SUPERADMIN
- Acceso Completo al Sistema - Control completo sobre todos los datos y configuraciones organizacionales
- isShowAllAndOwnProjectCRUD() - Puede ver y gestionar todos los proyectos
- isShowAllAndOwnTaskCRUD() - Puede ver y gestionar todas las tareas
- Gestión de Equipos - Puede gestionar todos los miembros del equipo y roles
- Control Financiero - Acceso a todas las características de facturación y financieras
2. ORGANIZATION_MANAGER
- Liderazgo del Equipo - Gestionar equipos, proyectos y configuraciones organizacionales
- isShowAllAndOwnProjectCRUD() - Puede ver y gestionar todos los proyectos del equipo
- isShowAllAndOwnTaskCRUD() - Puede ver y gestionar todas las tareas del equipo
- Gestión de Clientes - Acceso completo a relaciones y datos de clientes
- Acceso Financiero - Puede gestionar facturación y gastos
3. SALES_MANAGER
- Operaciones de Ventas - Supervisar actividades de ventas y gestionar equipo de ventas
- isShowAllAndOwnTaskCRUD() - Puede ver y gestionar todas las tareas
- isShowAllAndOwnContactCRUD() - Puede gestionar todos los contactos y leads
- isShowAllAndOwnDealCRUD() - Puede gestionar todas las oportunidades y tratos
- Creación de Proyectos - Puede crear proyectos para clientes
- Financiero Limitado - Puede crear facturas pero acceso financiero limitado
4. SALES_REPRESENTATIVE
- Acceso de Ventas Enfocado - Acceso solo a leads y tratos asignados
- isShowAllAndOwnDealCRUD() - Puede gestionar tratos y oportunidades
- Creación de Proyectos - Puede crear proyectos para sus clientes
- Alcance Limitado - No puede acceder a datos de otros miembros del equipo
- Interacción con Clientes - Puede gestionar relaciones con clientes asignados
5. PROJECT_MANAGER
- Rol Definido - El enum existe pero la implementación no se encontró en el código analizado
- Uso Limitado - El rol puede no estar activamente implementado en el sistema actual
6. USER
- Ejecución de Tareas - Puede trabajar en tareas y proyectos asignados
- Asignación de Proyecto Requerida - Debe estar asignado a proyectos para acceder
- Acceso de Colaboración - Puede comentar, asignar usuarios y rastrear tiempo
- Administración Limitada - No puede crear proyectos o gestionar configuraciones del equipo
7. PROJECT_VIEWER
- Rol de Acceso de Cliente - Diseñado para acceso al portal del cliente
- Dos Sub-Tipos - Variantes 'viewer' y 'manager'
- Asignación de Proyecto Requerida - Debe estar asignado a proyectos específicos
- Acceso de Lectura/Escritura - Puede ver e interactuar con proyectos asignados
- Rol Gratuito - Agregar usuarios en este rol es gratuito
Detalles de Implementación de Roles
Métodos de Verificación de Roles: Basado en análisis del modelo User:
- hasRole(RoleName $role) - Verificar si el usuario tiene un rol específico
- Métodos específicos de rol - isSuperAdmin(), isOrganizationManager(), etc.
- Verificación de permisos - hasPermission(string $permission)
- Grupos de permisos CRUD - isShowAllAndOwnProjectCRUD(), etc.
Sub-Tipos de Visualizador de Proyecto:
- isViewer() - Rol PROJECT_VIEWER con valor project_viewer 'viewer'
- isViewerManager() - Rol PROJECT_VIEWER con valor project_viewer 'manager'
- isProjectViewer() - Cualquier rol PROJECT_VIEWER independientemente del sub-tipo
Permisos a Nivel de Proyecto - Quién Puede Acceder a Qué Proyectos
Control de Acceso a Proyectos
Implementación de Permisos de Proyecto: Basado en análisis de ProjectPolicy:
Visualización de Proyectos (viewAny):
- Verificación de Permisos - Usuarios con permiso 'project.viewAny'
- Acceso de Visualizador - Los visualizadores de proyecto pueden ver proyectos asignados
- Aislamiento del Equipo - Los usuarios solo ven proyectos de su equipo
Creación de Proyectos (create):
- Roles de Administrador - isShowAllAndOwnProjectCRUD() (Superadmin, OrgManager)
- Roles de Ventas - Los Gerentes de Ventas y Representantes de Ventas pueden crear proyectos
- Restricción de Usuario - Los usuarios regulares no pueden crear proyectos
Edición de Proyectos (edit/update):
- Basado en Permisos - Usuarios con permiso 'project.update'
- Excepción de Visualizador - Los visualizadores de proyecto pueden editar si están asignados al proyecto
- Basado en Propiedad - Los usuarios de ventas pueden editar sus propios proyectos
- Validación del Equipo - Todas las ediciones requieren membresía del mismo equipo
Eliminación/Archivado de Proyectos:
- Control de Administrador - Principalmente roles de administrador y gerente
- Derechos de Propiedad - Los usuarios de ventas pueden eliminar sus propios proyectos
- Aislamiento del Equipo - Solo se pueden eliminar proyectos dentro del mismo equipo
Sistema de Asignación de Proyectos
Relaciones Usuario-Proyecto:
- Sistema de Asignación de Usuarios - Asignación explícita de usuarios a proyectos
- belongsToProject() - Método para verificar si el usuario pertenece al proyecto
- Validación del Equipo - La asignación de proyecto requiere membresía del mismo equipo
- Cascada de Permisos - La asignación de proyecto afecta el acceso a tableros y tareas
Beneficios de Asignación: ✅ Control Granular - Asignar usuarios específicos a proyectos específicos
✅ Aislamiento de Seguridad - Los usuarios solo acceden a proyectos asignados
✅ Gestión Flexible - Fácil agregar/eliminar usuarios de proyectos
✅ Herencia de Permisos - La asignación de proyecto habilita acceso a tableros y tareas
Seguridad a Nivel de Tablero - Controles de Acceso Específicos del Tablero
Sistema de Permisos de Tablero
Control de Acceso a Tableros: Basado en análisis de ProjectBoardPolicy:
Visualización de Tableros:
- Dependencia de Permisos de Tareas - Requiere permiso 'task.viewAny'
- Asignación de Proyecto - Debe estar asignado al proyecto que contiene el tablero
- Membresía del Equipo - Debe ser miembro del mismo equipo que el tablero
- Acceso Basado en Roles - Diferentes niveles de acceso basados en el rol del usuario
Creación de Tableros:
- Roles de Administrador - Los usuarios isShowAllAndOwnTaskCRUD() pueden crear tableros
- Usuarios Regulares - Los usuarios pueden crear tableros en proyectos asignados
- Gerentes Visualizadores - Pueden crear tableros en proyectos asignados
- Restricción de Visualizador - Los visualizadores regulares no pueden crear tableros
Gestión de Tableros:
- Permiso de Actualización - Requiere permiso 'task.update'
- Basado en Propiedad - Los usuarios pueden gestionar tableros que poseen
- Anulación de Administrador - Los administradores pueden gestionar todos los tableros del equipo
- Validación del Equipo - Todas las operaciones requieren membresía del mismo equipo
Características de Seguridad del Tablero
Validación de Acceso:
- Verificación Multi-capa - Verificaciones de permisos, roles, equipo y asignación de proyecto
- Unión de Usuario de Proyecto - Consulta compleja uniendo tablas de proyectos y project_users
- Aislamiento del Equipo - Acceso al tablero estrictamente limitado a miembros del equipo
- Cascada de Permisos - El acceso al tablero habilita acceso a columnas y tareas
Beneficios de Seguridad: ✅ Seguridad Basada en Proyectos - Acceso al tablero vinculado a asignación de proyecto
✅ Aislamiento del Equipo - Separación completa entre diferentes equipos
✅ Respeto de Roles - Diferentes capacidades basadas en roles de usuario
✅ Reconocimiento de Propiedad - Los propietarios de tableros tienen permisos mejorados
Permisos a Nivel de Tarea - Acceso Granular a Tareas
Sistema de Permisos de Tareas
Control de Acceso a Tareas: Basado en análisis de TaskPolicy:
Visualización de Tareas:
- Validación del Equipo - Debe ser miembro del mismo equipo que la tarea
- Verificación de Equipo de Columna - Valida que el equipo del usuario coincida con el equipo de la columna de la tarea
- Todos los Roles Permitidos - Todos los tipos de roles pueden ver tareas (con validación del equipo)
- Acceso Universal - viewAny() devuelve true (con otras validaciones)
Creación de Tareas:
- Acceso Amplio - La mayoría de los roles pueden crear tareas (administrador, usuario, visualizador, gerente visualizador)
- Asignación de Proyecto - Debe tener acceso al proyecto objetivo
- Verificación de Permisos - Algunos roles requieren permiso 'task.update'
- Validación del Equipo - La creación de tareas limitada a miembros del equipo
Gestión de Tareas:
- Actualizar Tareas - Permisos similares a la creación de tareas
- Eliminar Tareas - Requiere rol apropiado y membresía del equipo
- Asignar Usuarios - Puede asignar usuarios a tareas con permisos apropiados
- Agregar Comentarios - Acceso amplio para colaboración del equipo
Permisos Especiales de Tareas:
- moveToBoard - Puede mover tareas entre tableros dentro del mismo equipo
- Seguimiento de Tiempo - Los visualizadores de proyecto con tipo 'viewer' no pueden rastrear tiempo
- Acceso a Archivos - El acceso a adjuntos de tareas sigue permisos de tareas
Implementación de Seguridad de Tareas
Patrón de Validación de Permisos: Todas las operaciones de tareas siguen un patrón de validación similar:
- Validación del Equipo - Verificar que el equipo del usuario coincida con el equipo de la columna de la tarea
- Verificación de Rol - Verificar que el rol del usuario tenga permisos apropiados
- Asignación de Proyecto - Asegurar que el usuario esté asignado al proyecto (para visualizadores)
- Cadena de Permisos - Verificar cadenas de permisos específicas donde se requiera
Beneficios de Seguridad de Tareas: ✅ Aislamiento del Equipo - Tareas completamente aisladas entre equipos
✅ Acceso Basado en Proyectos - Acceso a tareas vinculado a asignación de proyecto
✅ Permisos Apropiados por Rol - Diferentes capacidades basadas en el rol del usuario
✅ Control Granular - Permisos específicos para diferentes operaciones de tareas
Acceso al Portal del Cliente - Qué Pueden Ver y Hacer los Clientes
Implementación del Portal del Cliente
Sistema de Usuarios Cliente: Basado en análisis del código, el acceso al portal del cliente usa el rol PROJECT_VIEWER:
Características del Portal del Cliente:
- Vista DashboardClient - Panel especial para usuarios cliente
- Detección isViewer() - El sistema detecta usuarios cliente y los enruta a la interfaz del cliente
- Integración de Chat - Creación automática de chat para comunicación con clientes
- Integración de Widget - Widget del portal del cliente para comunicación
Permisos de Acceso del Cliente:
- Asignación de Proyecto Requerida - Los clientes deben estar asignados a proyectos específicos
- Validación del Equipo - Acceso del cliente limitado a su contexto del equipo
- Alcance Limitado - Los clientes solo ven proyectos asignados y datos relacionados
- Interfaz Profesional - Interfaz separada orientada al cliente
Seguridad del Portal del Cliente
Control de Acceso para Clientes:
- Enrutamiento Basado en Roles - Los usuarios isViewer() enrutados automáticamente al portal del cliente
- Aislamiento de Proyectos - Los clientes solo ven proyectos a los que están asignados
- Filtrado de Datos - Todas las consultas filtradas por asignación y permisos del cliente
- Límite del Equipo - Acceso del cliente estrictamente limitado a su equipo
Beneficios del Portal del Cliente: ✅ Acceso Seguro - Los clientes solo ven información relevante del proyecto
✅ Interfaz Profesional - Interfaz limpia y apropiada para clientes
✅ Transparencia del Proyecto - Los clientes pueden ver progreso y estado del proyecto
✅ Comunicación Controlada - Canales de comunicación gestionados con el equipo
Arquitectura del Sistema de Permisos
Implementación Técnica
Almacenamiento de Permisos:
- Sistema de Roles - Almacena roles de usuario disponibles y capacidades
- Asignación de Roles de Usuario - Vincula usuarios a roles con contexto del equipo
- Permisos Individuales - Permisos específicos dentro de cada rol
- Aislamiento del Equipo - Todos los permisos con alcance a nivel de equipo
Verificación de Permisos:
- hasPermission() - Verificación de permisos basada en cadenas
- Métodos de Rol - Métodos específicos de verificación de roles
- Clases de Política - Clases de política dedicadas para cada modelo
- Registro de Puertas - Registro automático de puertas para todos los permisos
Capas de Seguridad:
- Autenticación - El usuario debe estar conectado
- Membresía del Equipo - El usuario debe ser miembro del equipo relevante
- Validación de Rol - El usuario debe tener rol apropiado
- Verificación de Permisos - El usuario debe tener permiso específico
- Asignación de Proyecto - El usuario debe estar asignado al proyecto (donde sea aplicable)
Beneficios de Permisos
✅ Seguridad Multi-capa - Múltiples capas de validación previenen acceso no autorizado
✅ Aislamiento del Equipo - Separación completa entre diferentes equipos
✅ Acceso Apropiado por Rol - Los permisos coinciden con las responsabilidades del usuario
✅ Control Específico del Proyecto - Control granular sobre el acceso al proyecto
✅ Seguridad del Cliente - Acceso seguro y controlado para usuarios cliente
Comenzando con la Gestión de Permisos
Guía de Inicio Rápido
Paso 1: Entender tu Rol
- Verificar tu rol de usuario y permisos
- Entender qué acciones puedes realizar
- Saber qué proyectos y datos puedes acceder
- Identificar cualquier limitación en tu acceso
Paso 2: Gestionar Permisos del Equipo
- Revisar roles y niveles de acceso de miembros del equipo
- Asignar usuarios a proyectos apropiados
- Verificar que los miembros del equipo tengan permisos necesarios
- Ajustar roles según sea necesario para requisitos del proyecto
Paso 3: Configurar Acceso del Cliente
- Configurar usuarios cliente con rol PROJECT_VIEWER
- Asignar clientes a proyectos específicos
- Configurar acceso al portal del cliente apropiadamente
- Probar acceso del cliente para asegurar aislamiento apropiado
Mejores Prácticas de Permisos
✅ Principio de Menor Privilegio - Dar a los usuarios solo el acceso que necesitan
✅ Revisión Regular - Auditar periódicamente roles y permisos de usuarios
✅ Definición Clara de Roles - Asegurar que el equipo entienda sus niveles de acceso
✅ Asignación de Proyectos - Asignar correctamente usuarios a proyectos relevantes
✅ Separación de Clientes - Mantener acceso del cliente seguro y apropiado
✅ Aislamiento del Equipo - Mantener límites claros entre equipos
Solución de Problemas de Permisos
Problemas Comunes
No Puede Acceder a Proyectos:
- Verificación de Rol - Verificar que tienes rol apropiado para acceso a proyectos
- Asignación de Proyecto - Asegurar que estás asignado al proyecto específico
- Membresía del Equipo - Confirmar que eres miembro del equipo correcto
- Cadena de Permisos - Verificar si tienes las cadenas de permisos requeridas
No Puede Crear/Editar Tareas:
- Permiso de Tarea - Verificar que tienes permiso 'task.update'
- Asignación de Proyecto - Asegurar que estás asignado al proyecto
- Validación del Equipo - Confirmar que tu equipo coincide con el equipo de la tarea
- Limitaciones de Rol - Algunos roles tienen acceso restringido a tareas
Problemas del Portal del Cliente:
- Configuración de Rol - Verificar que el cliente tiene rol PROJECT_VIEWER
- Asignación de Proyecto - Asegurar que el cliente está asignado a proyectos específicos
- Configuración del Portal - Verificar configuración del widget del portal del cliente
- Contexto del Equipo - Verificar que el cliente está en contexto del equipo correcto
Depuración de Permisos
Verificando tus Permisos:
- Verificación de Rol - Confirmar tu rol asignado
- Lista de Permisos - Revisar tus permisos específicos
- Asignación de Proyecto - Verificar a qué proyectos estás asignado
- Contexto del Equipo - Verificar que estás en el equipo correcto
- Validación de Política - Entender qué reglas de política se aplican a tus acciones
Próximos Pasos
Ahora que entiendes permisos y control de acceso, estás listo para explorar:
- Funciones Móviles y Responsivas - Interfaz móvil e interacciones táctiles
- Reportes y Análisis - Métricas de rendimiento del proyecto y productividad del equipo
Recuerda: El sistema de permisos en Corcava está diseñado para proporcionar seguridad mientras habilita colaboración. Entender tu rol y permisos te ayudará a trabajar efectivamente dentro del sistema mientras mantienes controles de acceso apropiados para tu equipo y clientes.
