========================== Sistema de Módulos ========================== NoxPanel implementa un sistema de **activación modular por usuario**. Cada módulo funcional del panel (hosting, VPS, facturación, tickets) puede habilitarse o deshabilitarse individualmente para cada usuario, permitiendo un control granular del acceso. .. contents:: En esta página :local: :depth: 2 Módulos Disponibles ==================== NoxPanel cuenta con cuatro módulos principales: .. list-table:: :header-rows: 1 :widths: 20 30 50 * - Módulo - Campo en User - Descripción * - **Hosting** - ``can_access_hosting`` - Panel cPanel-like con motor de hosting (sites, DNS, mail, FTP, SSL) * - **VPS & VMs** - ``can_access_vps`` - Gestión de máquinas virtuales con Proxmox * - **Facturación** - ``can_access_billing`` - Suscripciones, facturas, pagos (Stripe/PayPal) * - **Tickets** - ``can_access_ticketing`` - Sistema de soporte / helpdesk con IMAP/OAuth2 Modelo de Usuario ================== Los campos de control de acceso a módulos se encuentran en el modelo ``User`` (``app/accounts/models.py``), que extiende ``AbstractUser`` de Django: .. code-block:: python class User(AbstractUser): # Module access control can_access_vps = models.BooleanField( default=False, help_text="Permite acceso al módulo de VPS & VMs" ) can_access_hosting = models.BooleanField( default=False, help_text="Permite acceso al módulo de Hosting" ) can_access_billing = models.BooleanField( default=False, help_text="Permite acceso al módulo de Facturación" ) can_access_ticketing = models.BooleanField( default=False, help_text="Permite acceso al módulo de Tickets" ) Por defecto, todos los campos están en ``False``, es decir, un usuario recién creado no tiene acceso a ningún módulo hasta que un administrador se lo asigne. Regla de Superusuario --------------------- Los **superusuarios** (``is_superuser=True``) siempre tienen acceso a todos los módulos, independientemente del valor de los campos ``can_access_*``. .. code-block:: python def has_hosting_access(self): if self.is_superuser: return True return self.can_access_hosting Verificación Genérica --------------------- El modelo incluye un método genérico para verificar acceso a cualquier módulo: .. code-block:: python def has_module_access(self, module_name): """Generic module access check.""" if self.is_superuser: return True mapping = { 'vps': self.can_access_vps, 'hosting': self.can_access_hosting, 'billing': self.can_access_billing, 'ticketing': self.can_access_ticketing, } return mapping.get(module_name, False) Configuración desde Django Admin ================================= Los administradores pueden habilitar o deshabilitar módulos para cada usuario directamente desde el **Django Admin Panel** (``/admin/``). Pasos para configurar acceso ------------------------------ 1. Acceder al Django Admin en ``https:///admin/`` 2. Ir a **Accounts > Users** 3. Seleccionar el usuario a configurar 4. En la sección de campos del usuario, marcar o desmarcar: - ``Can access hosting`` — Módulo de hosting - ``Can access vps`` — Módulo de VPS - ``Can access billing`` — Módulo de facturación - ``Can access ticketing`` — Módulo de tickets 5. Guardar los cambios Los cambios son **inmediatos**: la próxima vez que el usuario cargue el panel, verá únicamente los módulos habilitados en su barra lateral. Edición masiva -------------- Para habilitar un módulo a múltiples usuarios a la vez: 1. En la lista de usuarios del admin, seleccionar los usuarios deseados 2. Usar una acción personalizada o editar individualmente .. tip:: También se puede automatizar la activación de módulos mediante la API de Django Admin o scripts de gestión (``manage.py``). Comportamiento del Panel ========================== La interfaz de NoxPanel se adapta dinámicamente según los módulos activos: - **Barra lateral**: Solo muestra enlaces a módulos accesibles - **Dashboard**: Muestra widgets solo de los módulos habilitados - **API REST**: Los endpoints de módulos deshabilitados devuelven ``403 Forbidden`` - **URLs directas**: Si un usuario intenta acceder a una URL de un módulo deshabilitado, es redirigido al dashboard principal Escenarios de Uso ================== Proveedor solo de Hosting -------------------------- Para un cliente que solo necesita hosting compartido: - ``can_access_hosting = True`` - ``can_access_vps = False`` - ``can_access_billing = True`` - ``can_access_ticketing = True`` Administrador de VPS -------------------- Para un cliente que solo gestiona máquinas virtuales: - ``can_access_hosting = False`` - ``can_access_vps = True`` - ``can_access_billing = True`` - ``can_access_ticketing = True`` Acceso completo ---------------- Para un cliente enterprise con todos los servicios: - ``can_access_hosting = True`` - ``can_access_vps = True`` - ``can_access_billing = True`` - ``can_access_ticketing = True`` Solo consulta de facturas -------------------------- Para un usuario de contabilidad: - ``can_access_hosting = False`` - ``can_access_vps = False`` - ``can_access_billing = True`` - ``can_access_ticketing = False``