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 |
|
Panel cPanel-like con motor de hosting (sites, DNS, mail, FTP, SSL) |
VPS & VMs |
|
Gestión de máquinas virtuales con Proxmox |
Facturación |
|
Suscripciones, facturas, pagos (Stripe/PayPal) |
Tickets |
|
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
Acceder al Django Admin en
https://<tu-dominio>/admin/Ir a Accounts > Users
Seleccionar el usuario a configurar
En la sección de campos del usuario, marcar o desmarcar:
Can access hosting— Módulo de hostingCan access vps— Módulo de VPSCan access billing— Módulo de facturaciónCan access ticketing— Módulo de tickets
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:
En la lista de usuarios del admin, seleccionar los usuarios deseados
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 ForbiddenURLs 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 = Truecan_access_vps = Falsecan_access_billing = Truecan_access_ticketing = True
Administrador de VPS
Para un cliente que solo gestiona máquinas virtuales:
can_access_hosting = Falsecan_access_vps = Truecan_access_billing = Truecan_access_ticketing = True
Acceso completo
Para un cliente enterprise con todos los servicios:
can_access_hosting = Truecan_access_vps = Truecan_access_billing = Truecan_access_ticketing = True
Solo consulta de facturas
Para un usuario de contabilidad:
can_access_hosting = Falsecan_access_vps = Falsecan_access_billing = Truecan_access_ticketing = False