Zum Hauptinhalt springen

Paket-Einschränkungen & Feature-Flags

[pakete] [admin] [billing]

Pro Lizenzpaket lässt sich definieren welche Produkte sichtbar sind und welche Funktionen freigeschaltet werden. Granulare Kontrolle über das Angebot.

Für wen

Admins, die mehrere Pakete (Basic / Pro / Enterprise) mit unterschiedlichem Umfang anbieten wollen.

Was ist konfigurierbar

Produkt-Sichtbarkeit (Whitelist / Blacklist)

Kategorien:

  • allowed_categories — Whitelist: nur diese Kategorien sind sichtbar. Leer = alle.
  • excluded_categories — Blacklist: diese Kategorien sind ausgeschlossen. Gewinnt immer (auch gegen Whitelist).

Kompatibilitäten:

  • allowed_compatibilities — Whitelist: nur Produkte mit mindestens einem dieser Tags. Produkte ohne Compat-Tags sind immer sichtbar.
  • excluded_compatibilities — Blacklist.

Hard-Limits (Anzahl)

  • max_downloads_per_month — Monatliche Download-Quote (Reset 1. des Monats UTC). 0 = unbegrenzt.
  • max_printers — Wie viele Drucker pro Kunde. 0 = unbegrenzt.
  • max_active_licenses — Wie viele Kunden gleichzeitig aktiv auf diesem Paket. 0 = unbegrenzt. (Enforcement TBD — siehe Wiki-Hinweis unten)

Feature-Flags

  • has_crm_access — CRM-Tab im Portal sichtbar (Phase 2 Implementierung)
  • has_api_access — REST/Feed-API-Token kann generiert werden
  • has_white_label — Eigene Domain + Footer-Logo entfernbar (Phase 2)
  • has_priority_support — Tickets bekommen "Priority"-Tag in der Admin-Inbox
  • watermark_downloads — Downloads bekommen Watermark (Phase 2)

Wo gilt es

Portal: Produkt-Liste

/dashboard/products filtert anhand von:

  1. excluded_categories (raus)
  2. allowed_categories (nur Whitelist sichtbar)
  3. excluded_compatibilities (raus)
  4. allowed_compatibilities (nur wenn Item Compats hat)

Implementierung: apps/portal/app/dashboard/products/page.tsx.

Portal: Feed-Export

Feed-Export wendet die identische Logik an. Was im Portal nicht sichtbar ist, ist auch im Feed nicht.

Admin: Produkt-Auswahl im Paket

Einstellungen → Pakete → Paket bearbeiten → Tab "Einschränkungen" zeigt eine Liste aller Kategorien + Compats des Tenants mit Whitelist/Blacklist-Toggles.

Schritt für Schritt — Paket-Einschränkungen anpassen

1. Paket öffnen

Einstellungen → Pakete → Paket auswählen.

2. Tab "Einschränkungen"

  • Erlaubte Kategorien: Multi-Select aller Kategorien deines Katalogs.
  • Ausgeschlossene Kategorien: Multi-Select.
  • Erlaubte Kompatibilitäten: Multi-Select aller Compat-Tags.
  • Ausgeschlossene Kompatibilitäten: Multi-Select.

Leer lassen = keine Einschränkung (= alle freigegeben).

3. Tab "Limits"

  • max_downloads_per_month
  • max_printers
  • max_active_licenses

4. Tab "Features"

  • has_crm_access, has_api_access, has_white_label, has_priority_support, watermark_downloads (Toggle pro Flag)

5. Speichern

Wirkt sofort für alle Kunden auf diesem Paket — beim nächsten Portal-Aufruf sehen sie die neue Auswahl.

Häufige Fragen

Was wenn ich ein Produkt NACH Paket-Erstellung in eine ausgeschlossene Kategorie packe? Es verschwindet sofort aus dem Portal aller Kunden auf diesem Paket. Wirkt rückwirkend.

Wie zeige ich Kunden welche Limits sie haben? Im Account-Tab "Mein Account" gibt es eine Sektion "Paket-Nutzung" mit aktuellem Verbrauch (Downloads-this-month, Drucker-Count). Implementiert in apps/portal/app/dashboard/account/PackageUsageSection.tsx.

Was passiert wenn max_downloads_per_month erreicht ist? Aktuell: Anzeige der Quote im Portal, aber Download-Trigger wird noch nicht hart blockiert (Enforcement TBD). Drucker-Limit ist hingegen bereits aktiv: /api/portal/printers POST returnt 429 mit { limit, used }.

Kann ich Pakete migrieren? Im Kunden-Detail kannst du das Paket eines Kunden ändern. Die neuen Einschränkungen wirken sofort.

Was bedeutet show_in_join_preview? Separate Flag (nicht in dieser Kategorie). Steuert ob das Paket auf der Landing-Page als Pricing-Card erscheint oder nur per Einladung verteilt wird.

Verwandt

  • Pakete — Pakete generell konfigurieren
  • Feed-Export — Einschränkungen wirken auch hier
  • Account — Kundensicht der Limits