Daily Report - 30. Dezember 2025

Zusammenfassung

Implementierung der Zitadel SSO-Integration, vollständiges Admin-Panel mit 5 Verwaltungsseiten und Responsive Design für alle Admin-Komponenten.


Implementierte Features

1. Zitadel SSO Integration

  • OAuth2/OIDC Authentifizierung mit Zitadel
  • Role Mapping System: Zitadel-Rollen → Backend-Permissions
  • Wildcard-Unterstützung für Permissions:
    • * (Admin/CEO): Voller Zugriff
    • backoffice.* (Manager): Zugriff auf alle Backoffice-Apps
    • Spezifische Permissions: backoffice.crm, backoffice.finance, etc.
  • Sequentielle Mitarbeiter-Codes: Automatische Generierung (KIT-0001, KIT-0002, …)
  • AuthCallbackPage: Handling des OAuth2-Callbacks
  • Dokumentation: ZITADEL_ROLE_SETUP.md für Setup-Anleitung

Technische Details:

  • backend/app/core/auth/zitadel.py: SSO-Handler mit Token-Validierung
  • backend/app/core/auth/role_mapping.py: Permission-Mapping-Logik
  • ui/src/services/zitadel.ts: Frontend-Integration
  • ui/src/composables/useAuth.ts: Erweitert um Wildcard-Permission-Checks

2. Admin-Panel (Komplett neu)

Vollständiges Administrations-Panel mit 5 Tabs, nur sichtbar für Admin/CEO:

2.1 Mitarbeiter-Verwaltung

  • Tabellenansicht mit allen Mitarbeitern
  • Suchfunktion (Live-Suche)
  • Pagination (20 pro Seite)
  • Spalten: Code, Name, Email, Abteilung, Rolle, Status
  • Aktionen: Bearbeiten, Löschen
  • Status-Badges (active/inactive)

2.2 Abteilungs-Verwaltung

  • Card-Grid-Layout (responsive)
  • Abteilungsinformationen: Name, Code, Beschreibung
  • Manager-Anzeige: Leiter der Abteilung
  • CRUD-Operationen: Erstellen, Bearbeiten, Löschen

2.3 Rollen & Berechtigungen

  • Card-Grid-Layout mit Rollen
  • Permission-Badges: Anzeige aller zugewiesenen Berechtigungen
  • Farbcodierte Icons:
    • Admin (rot), CEO (lila), Manager (blau), Employee (grün)
  • Zitadel Role ID: Anzeige der verknüpften Zitadel-Rolle
  • Systemrollen-Schutz: Admin/CEO/Manager/Employee können nicht gelöscht werden

2.4 System-Einstellungen

  • Komplett redesignt: Durchgängiges scrollbares Formular
  • Firmeninformationen: Name, Rechtsform, Steuernummer, Adresse, Kontaktdaten
  • Lokalisierung: Zeitzone, Sprache, Währung, Datumsformat
  • Arbeitszeiten: Stunden/Tag, Tage/Woche, Urlaubstage, Wochenend-Konfiguration
  • System: Wartungsmodus, Registrierung, Email-Verifizierung
  • Temporäre Speicherung: localStorage (Backend-Endpoint TODO)

2.5 Audit-Log

  • Tabellenansicht mit allen System-Aktivitäten
  • Filter: Benutzer, Aktion, Ressource, Datumsbereich
  • Action-Badges: Farbcodiert (Create, Update, Delete, Login, Logout)
  • Detail-Dialog: Vollständige Informationen inkl. JSON-Diff
  • Pagination: 50 Einträge pro Seite
  • Mock-Daten: UI fertig, Backend-Implementierung TODO

3. Responsive Design

Alle Admin-Seiten optimiert für:

  • Desktop (>1024px): Volle Funktionalität
  • Tablet (768px - 1024px): Angepasste Grid-Layouts
  • Mobile (<768px): Einspaltiges Layout, kleinere Schriften
  • Small Mobile (<480px): Maximale Kompaktheit

Optimierungen:

  • AdminApp: Horizontal scrollbare Tabs, Icon-Only auf Mobile
  • Tables: Horizontal scrollbar bei zu vielen Spalten
  • Forms: Single-Column auf Mobile
  • Dialogs: Full-Width auf Mobile (90vw)
  • Buttons: Full-Width auf Small Mobile

4. UI/UX Verbesserungen

  • Dynamische Dock-Generierung: Apps werden aus appRegistry geladen
  • Permission-basiertes Filtering: Nur Apps mit entsprechenden Permissions sichtbar
  • Window-Layer Fix: CSS-Bug behoben (position: absolute statt relative)
  • Single Source of Truth: appRegistry enthält alle App-Metadaten

Technische Änderungen

Backend

1
2
3
4
5
6
backend/app/core/auth/
├── zitadel.py (neu)          # SSO-Handler
├── role_mapping.py (neu)      # Permission-Mapping
└── routes.py (erweitert)      # /auth/callback Endpoint

backend/requirements.txt       # + python-jose, pyjwt

Frontend

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ui/src/modules/admin/
├── AdminApp.vue (neu)
└── pages/
    ├── EmployeesPage.vue (neu)
    ├── DepartmentsPage.vue (neu)
    ├── RolesPage.vue (neu)
    ├── SystemSettingsPage.vue (neu)
    └── AuditLogPage.vue (neu)

ui/src/services/
└── zitadel.ts (neu)           # Zitadel-Client

ui/src/pages/
└── AuthCallbackPage.vue (neu) # OAuth2-Callback

Dokumentation

1
2
docs/
└── ZITADEL_ROLE_SETUP.md (neu) # Zitadel Setup-Anleitung

Git Commit

Commit: eea6121 Branch: dev Message: Add Zitadel SSO integration and Admin panel with responsive design Files Changed: 22 Dateien Lines Added: 4067+


Offene TODOs (für morgen)

1. Audit-Log Backend (Priorität: Hoch)

  • AuditLog Model erstellen (app/modules/system/models.py)
  • Model zu app/modules/__init__.py hinzufügen
  • Alembic Migration erstellen
  • GET /api/audit-logs Endpoint mit Filtern
  • Integration in Employee/Department/Role CRUD-Operationen
  • IP-Adresse aus Request extrahieren

2. System-Einstellungen Backend

  • SystemSettings Model erstellen
  • GET/PUT /api/settings Endpoint
  • Alembic Migration
  • Default-Werte in DB seeden

3. Admin-Panel CRUD-Forms

  • Employee Create/Edit Dialog
  • Department Create/Edit Dialog
  • Role Create/Edit Dialog
  • Permission-Auswahl UI

4. Testing

  • SSO-Login mit allen Rollen testen
  • Permission-Filtering testen
  • Admin-Panel auf verschiedenen Geräten testen

Notizen

  • Zitadel Role IDs werden in roles.keycloak_id gespeichert
  • Employee Codes folgen Pattern: PREFIX-NNNN (z.B. KIT-0001)
  • Wildcard-Permissions ermöglichen flexibles Access-Management
  • Audit-Log Funktion existiert bereits (log_action()), nur Model fehlt
  • localStorage ist nur temporär für Settings/Audit (bis Backend fertig)

Team-Feedback

  • Jessica: SSO-Login funktioniert für beide Accounts
  • Joshua: Admin-Panel responsive Design gefällt
  • SystemSettingsPage: Durchgängiges Design besser als getrennte Sections