Globales Lizenzmodell

Architektur-Festlegung aus Brainstorm 2026-04-28. Plattform-weit — nicht CMS-spezifisch.

License-Unit-Typen

Eine license_unit ist die kleinste lizenzierbare Einheit. Vier Typen:

TypCMS-RelevanzBeschreibung
standardjaFree-/Cheap-Defaults der Plattform. Jeder Tenant hat sie automatisch.
themeja, nur CMSBundle von Page-Editor-Variants quer ueber Section-Types + Demo-Pages.
premium_sectionja, nur CMSStandalone Page-Editor-Bundle: 1+ eigene Component (mit speziellem document_json) und/oder 1+ Variants. Beispiel SliderRevolution.
moduleoptionalBackend-Modul: Datenmodell + Studio-Admin-UI + Business-Logik. Kann optional CMS-Section-Templates beitragen, muss aber nicht.

Module mit vs. ohne CMS-Section-Templates

Module mit Section-Templates (Section-Types referenzieren das Modul via required_module_id):

  • Blog-Modul → collection.blog_listing, collection.blog_post_header, collection.related_posts
  • Event-Modul → collection.event_listing, collection.event_detail
  • (zukunftig) Product-Modul → collection.product_listing, collection.product_detail
  • (zukunftig) Case-Study-Modul → fuer B2B-Marketing

Module ohne CMS-Section-Templates (pure Backend-/Admin-Funktionalitaet):

  • Flows-Modul (Workflow-Engine) — Sidebar-Gruppe, kein Public-Page-Rendering
  • Forms-Modul — ggf. spaeter, FormBuilder existiert bereits
  • (zukunftig) CRM-Modul, Newsletter-Modul, …

Zentrale Plattform-Features (Auth, RBAC, Tenants, Brand-Tokens, Media-Library, Templates-Editor) sind kein Modul — sie sind Bestandteil der Standard-Plattform und benoetigen keine separate Lizenz.

Datenmodell

license_unit (
  license_unit_id INT PK,
  license_unit_key TEXT UNIQUE,        -- 'theme.atlas', 'module.blog', 'module.flows'
  license_unit_label TEXT,
  unit_type TEXT CHECK (unit_type IN ('standard','theme','premium_section','module')),
  module_namespace TEXT NULL,          -- nur fuer module: technical namespace ('blog', 'event', 'flows')
  has_cms_sections BOOLEAN NOT NULL DEFAULT FALSE,  -- module-only: bringt das Modul Section-Templates mit?
  parent_theme_id INT NULL REFERENCES license_unit(license_unit_id),  -- nur fuer premium_section: gehoert das Bundle zu einem Theme?
  pricing_model TEXT CHECK (pricing_model IN ('free','one_time','subscription')),
  price_amount NUMERIC NULL,
  price_currency TEXT DEFAULT 'EUR',
  designer_id INT NULL REFERENCES designer(designer_id),
  isactive BOOLEAN DEFAULT TRUE,
  createdat, updatedat
)
 
tenant_license (
  tenant_id, license_unit_id,
  status TEXT CHECK (status IN ('active','expired','trial','cancelled')),
  licensed_at, licensed_until,
  PRIMARY KEY (tenant_id, license_unit_id)
)
 
-- Section-Types haben optional eine Modul-Lizenz-Anforderung:
section_type.required_module_id INT NULL REFERENCES license_unit(license_unit_id)
-- NULL = Standard-verfuegbar
-- gesetzt = nur fuer Tenants mit aktiver tenant_license auf das Modul

Lizenz-Permissions

Wenn ein Tenant ein License-Unit lizenziert hat, gilt:

  • theme: alle Variants im Theme-Bundle stehen im Page-Editor zur Auswahl
  • premium_section: die Components/Variants des Premium-Bundles stehen zur Auswahl
  • module mit has_cms_sections=true: alle Section-Types mit required_module_id = <license_unit_id> werden im Page-Editor verfuegbar; die Backend-Funktionalitaet (Datenmodell, Admin-Views) wird aktiv
  • module mit has_cms_sections=false: nur die Backend-Funktionalitaet wird aktiv (z.B. Flows ist im Sidebar verfuegbar)

Bestehende Module im Code

Stand 2026-04-28:

  • Flows (Workflow-Engine) — implementiert, has_cms_sections=false
  • Events — implementiert, has_cms_sections=true (aber Section-Templates fehlen noch — Sprint-Aufgabe)
  • Blog — geplant, Blog-Modul
  • Pages (Page-Editor) — Plattform-Kern, kein Modul

Marketplace-Implikation

Designer/Drittanbieter koennen liefern:

  • Themes (CSS-only Variants-Bundles)
  • Premium-Sections (eigene Components + Variants)
  • Module (Backend + ggf. Section-Templates) — komplexer, hoehere Curation-Anforderungen

Theme- und Premium-Section-Designer brauchen kein Backend-Wissen. Module-Anbieter sehr wohl.

Zusammenhaenge