CreaRack-SL

Organization · Modelo core

Entidadactiveverificado 2026-04-21#core#model#multi-tenancy#saas

Organization · Modelo core

Propósito

Organization es el tenant SaaS raíz del sistema. Todos los Racks, Blueprints, recursos de red, credenciales y usuarios pertenecen a una Organization, que actúa como barrera de aislamiento entre clientes.

Contrato

Campos:

CampoTipoComportamiento
nameCharField(255)Nombre visible del tenant
addressTextField(blank)Dirección postal
created_at / updated_atDateTimeFieldauto_now_add / auto_now
is_activeBooleanField(default=True)Si la organización está operativa
max_racksIntegerField(default=10)Límite de racks según plan
planFK(Plan, SET_NULL, null)Plan de suscripción vinculado
extra_modulesM2M(SaaSModule, blank)Módulos à la carte adicionales al plan
disable_reasonCharField(300, blank)Razón mostrada en pausa
deleted_atDateTimeField(null)Soft-delete: su presencia indica borrado lógico
logo_pathCharField(255, blank)Ruta al logotipo
session_timeout_minutesIntegerField(default=10)Tiempo de inactividad para cerrar sesión
onboarding_completedBooleanField(default=False)Wizard de alta completado
sentinel_configJSONField(default=dict)Configuración del módulo Sentinel
backup_retention_daysIntegerField(default=0)Retención de backups; 0 delega al plan (Starter 7d, Pro 30d)

Métodos públicos:

  • is_deleted (@property) — True si deleted_at no es None (soft-delete).
  • get_active_modules() — devuelve set de slugs de módulos accesibles: siempre los SaaSModule.is_core=True más los registrados en extra_modules.

Meta: no hay clase Meta declarada. Usa valores por defecto de Django.

Dependencias entrantes

ArchivoReferencia
core/models.py:120User.organization FK (CASCADE)
core/models.py:170SystemLog.organization FK (CASCADE)
core/models.py:303StoredCredential.organization FK (CASCADE)
racks/models.pyBoxCategory, RackGroup, Stencil, Rack FK a Organization
racks/services/racks.pyRackService recibe Organization en cada método
blueprints/models.pyBlueprint, AIPrompt FK a Organization
monitoring/models.py:52MonitoringTarget, MonitoringAlert FK
monitoring/models_itsm.pySLAPolicy, NotificationChannel, EscalationPolicy, Runbook, etc.
monitoring/tasks.py:34Huey itera Organization.objects.all()
network/models.py:206,240,603DeviceDiscovery, VendorDeviceProfile, PortConnection
signage/models.py (8 FKs)Múltiples modelos de signage
core/admin.py:75OrganizationAdmin registrado

Dependencias salientes

  • core.models.Plan — FK, define los módulos base.
  • core.models.SaaSModule — M2M vía extra_modules.
  • django.db.models — ORM base.

Sin manager personalizado, sin signals declarados en el archivo.

Ejemplos

# Resolver módulos activos (core/models.py)
org = Organization.objects.get(pk=tenant_id)
active_slugs = org.get_active_modules()
# → {'core', 'racks', 'blueprints', ...}

# Soft-delete
org.deleted_at = timezone.now()
org.save()
assert org.is_deleted is True

# Resolución de tenant en vistas (racks/views.py:27)
org = request.user.organization or Organization.objects.first()
  • entity--core--model--plan — plan de suscripción vinculado.
  • entity--core--model--saasmodule — módulos SaaS asignables.
  • entity--core--model--user — usuarios del tenant.
  • entity--core--model--systemlog — logs scoped por tenant.
  • entity--core--model--storedcredential — credenciales del tenant.
  • entity--racks--model--rack — racks aislados por organización.
  • entity--blueprints--model--blueprint — blueprints aislados.
  • concept--saas--multi-tenancy — patrón arquitectónico.

Véase también

  • [[entity—core—model—user]]
  • [[entity—core—model—plan]]
  • [[entity—core—model—saasmodule]]
  • [[entity—core—model—systemlog]]
  • [[entity—core—model—storedcredential]]
  • [[entity—racks—model—rack]]
  • [[entity—blueprints—model—blueprint]]
  • [[concept—saas—multi-tenancy]]