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.

Módulos Disponibles

NoxPanel cuenta con cuatro módulos principales:

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:

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_*.

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:

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://<tu-dominio>/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