Zum Hauptinhalt springen

Release Notes — 10. April 2026

Diese Version implementiert das Tier-Gate für benutzerdefinierte Rollen (RBAC) und behebt einen Datenbankfehler bei der Workspace-Rollen-Indexkollision.


Benutzerdefinierte Rollen — Nur ENTERPRISE (RBAC Tier-Gate)

Übersicht

Das Erstellen, Bearbeiten und Löschen benutzerdefinierter Berechtigungsrollen ist jetzt auf den Enterprise-Tarif beschränkt. Dies ist der Branchenstandard — Clockify und Toggl Track beschränken benutzerdefinierte Rollen ebenfalls auf ihre höchste Tarifstufe.

Standardrollen (Betrachter, Mitglied, Manager, Eigentümer) bleiben auf allen Tarifen unverändert verfügbar.

Backend

EndpunktGuard
POST /api/v1/workspace-rolesrequireFeature('customRoles')
PUT /api/v1/workspace-roles/:roleIdrequireFeature('customRoles')
DELETE /api/v1/workspace-roles/:roleIdrequireFeature('customRoles')

Nicht-Enterprise-Arbeitsbereiche erhalten 403 FEATURE_NOT_AVAILABLE.

Frontend

  • useFeatureAccess.ts: customRoles auf 'enterprise' gesetzt
  • UnifiedRolesPage.tsx: „Neue Rolle"-Schaltfläche in <FeatureGate feature="customRoles"> eingebettet — in FREE/PRO-Tarifen ausgeblendet

Preisvergleichsseite

/api/v1/pricing-comparison gibt jetzt eine Zeile custom-roles in der Kategorie Team & Zusammenarbeit zurück:

FREEPROENTERPRISE
Benutzerdefinierte Rollen

Fix: Workspace-Rollen-Indexkollision

Problem

Workspace-Rollen (Scope: workspace) haben unitId: null, da sie nicht an einen bestimmten Arbeitsbereich gebunden sind. Der eindeutige Index { unitId, scope, name } verursachte einen E11000 DuplicateKey-Fehler ab dem zweiten Arbeitsbereich.

Auswirkung: Der Endpunkt /api/v1/workspace-roles?scope=workspace gab für alle Arbeitsbereiche außer dem ersten eine leere Liste zurück.

Fix

  • UnifiedRole.model.ts: Zwei partielle eindeutige Indizes (statt einem)
  • roleCopy.service.ts: insertOnefindOneAndUpdate + upsert (idempotent)
  • Migrationsskript ausgeführt: Alle 25 Unit-DBs repariert, fehlende Workspace-Rollen nachgefüllt

Änderungsübersicht

EbeneÄnderung
Backend tier.types.tscustomRoles zu FeatureName hinzugefügt
Backend FeatureGate.service.tscustomRoles → team.departments in beiden Feature-Maps
Backend workspaceRoles.routes.tsrequireFeature('customRoles') für POST / PUT / DELETE
Backend UnifiedRole.model.tsunitId: required: false + 2 partielle eindeutige Indizes
Backend pricing.controller.tsZeile custom-roles zur Kategorie Team & Zusammenarbeit
Backend stripe.config.ts'Benutzerdefinierte Rollen (RBAC)' zur ENTERPRISE-Feature-Liste
Frontend useFeatureAccess.tscustomRoles: 'enterprise'
Frontend UnifiedRolesPage.tsx„Neue Rolle"-Schaltfläche in <FeatureGate> eingebettet

Verfügbarkeit: Benutzerdefinierte Rollen erstellen/bearbeiten/löschen — Nur ENTERPRISE. Standardrollen — alle Tarifstufen.