User-Authentifizierung mit Rollen-basiertem Rechtesystem #3

Closed
opened 2026-03-30 13:30:31 +00:00 by Basti · 2 comments
Owner

Beschreibung

User-basierte Authentifizierung für TicketPilot mit Login, Session-Management und einem Rollen-basierten Rechtesystem. Aktuell sind alle Endpoints und das Dashboard ohne jede Absicherung öffentlich erreichbar.

Hintergrund

TicketPilot verwaltet Zugriff auf Code-Repositories, Odoo-Credentials und GitLab-Tokens. Ohne Auth kann jeder im Netzwerk Pipelines starten, Tickets manipulieren und auf sensible Daten zugreifen. Für einen produktiven Einsatz ist Auth zwingend notwendig.

Akzeptanzkriterien

  • Login-Seite mit Username/Passwort
  • Passwörter werden gehasht gespeichert (bcrypt)
  • JWT-basierte Session-Tokens mit Expiry
  • Alle API-Endpoints erfordern gültigen Token (außer /api/health und /login)
  • User-Model mit Rollen: admin, operator, viewer
  • Admin: Voller Zugriff (Settings, Repos, User-Verwaltung)
  • Operator: Tickets bearbeiten, Pipeline starten, Enrichment
  • Viewer: Nur lesen (Dashboard, Ticket-Details, keine Aktionen)
  • User-Verwaltung im Dashboard (nur Admin)
  • Initaler Admin-User wird bei erstem Start erstellt
  • Frontend zeigt Login-Screen wenn nicht eingeloggt
  • Frontend schickt Token bei jedem API-Call mit
  • Buttons/Aktionen werden je nach Rolle ein-/ausgeblendet

Technische Hinweise

  • Neues Model: backend/models/user.py (id, username, password_hash, role, created_at)
  • Alembic-Migration für users-Tabelle
  • Auth-Service: backend/services/auth_service.py (hash, verify, create_token, decode_token)
  • FastAPI Dependency: backend/api/auth.py mit get_current_user Dependency
  • Alle Router in backend/api/tickets.py, repos.py, pipeline.py, appsignal.py müssen die Auth-Dependency einbinden
  • Frontend: frontend/src/api/client.ts — Token im Header mitschicken
  • Frontend: frontend/src/pages/Login.tsx — Login-Seite
  • Frontend: frontend/src/pages/UserManagement.tsx — Admin-Seite für User
  • Frontend: frontend/src/App.tsx — Auth-Guard um Routes
  • Dependencies: python-jose[cryptography], passlib[bcrypt]
  • Migration nötig: ja (users-Tabelle)

Aufwand: XL

## Beschreibung User-basierte Authentifizierung für TicketPilot mit Login, Session-Management und einem Rollen-basierten Rechtesystem. Aktuell sind alle Endpoints und das Dashboard ohne jede Absicherung öffentlich erreichbar. ## Hintergrund TicketPilot verwaltet Zugriff auf Code-Repositories, Odoo-Credentials und GitLab-Tokens. Ohne Auth kann jeder im Netzwerk Pipelines starten, Tickets manipulieren und auf sensible Daten zugreifen. Für einen produktiven Einsatz ist Auth zwingend notwendig. ## Akzeptanzkriterien - [x] Login-Seite mit Username/Passwort - [x] Passwörter werden gehasht gespeichert (bcrypt) - [x] JWT-basierte Session-Tokens mit Expiry - [x] Alle API-Endpoints erfordern gültigen Token (außer /api/health und /login) - [x] User-Model mit Rollen: admin, operator, viewer - [x] Admin: Voller Zugriff (Settings, Repos, User-Verwaltung) - [x] Operator: Tickets bearbeiten, Pipeline starten, Enrichment - [x] Viewer: Nur lesen (Dashboard, Ticket-Details, keine Aktionen) - [x] User-Verwaltung im Dashboard (nur Admin) - [x] Initaler Admin-User wird bei erstem Start erstellt - [x] Frontend zeigt Login-Screen wenn nicht eingeloggt - [x] Frontend schickt Token bei jedem API-Call mit - [x] Buttons/Aktionen werden je nach Rolle ein-/ausgeblendet ## Technische Hinweise - Neues Model: `backend/models/user.py` (id, username, password_hash, role, created_at) - Alembic-Migration für users-Tabelle - Auth-Service: `backend/services/auth_service.py` (hash, verify, create_token, decode_token) - FastAPI Dependency: `backend/api/auth.py` mit `get_current_user` Dependency - Alle Router in `backend/api/tickets.py`, `repos.py`, `pipeline.py`, `appsignal.py` müssen die Auth-Dependency einbinden - Frontend: `frontend/src/api/client.ts` — Token im Header mitschicken - Frontend: `frontend/src/pages/Login.tsx` — Login-Seite - Frontend: `frontend/src/pages/UserManagement.tsx` — Admin-Seite für User - Frontend: `frontend/src/App.tsx` — Auth-Guard um Routes - Dependencies: `python-jose[cryptography]`, `passlib[bcrypt]` - Migration nötig: ja (users-Tabelle) ## Aufwand: XL
Basti added
doku
and removed
in work
labels 2026-03-30 17:14:10 +00:00
Author
Owner

Review bestanden. Alle Tests PASS (66/66 Backend, TypeScript fehlerfrei).

Getestete Auth-Funktionen:

  • Login (Erfolg/Fehler/Unbekannter User)
  • JWT Token Create/Decode/Invalid
  • Endpoint-Schutz (401 ohne Token)
  • Rollen-Check: Viewer 403 auf Schreib-Ops, Operator OK, Admin-only für Settings
  • User-CRUD (Admin-only), Self-Delete verhindert
  • Health bleibt public

Label auf doku gesetzt.

Review bestanden. Alle Tests PASS (66/66 Backend, TypeScript fehlerfrei). Getestete Auth-Funktionen: - Login (Erfolg/Fehler/Unbekannter User) - JWT Token Create/Decode/Invalid - Endpoint-Schutz (401 ohne Token) - Rollen-Check: Viewer 403 auf Schreib-Ops, Operator OK, Admin-only für Settings - User-CRUD (Admin-only), Self-Delete verhindert - Health bleibt public Label auf doku gesetzt.
Author
Owner

Dokumentation aktualisiert. Issue wird geschlossen.

Geänderte Docs:

  • README.md: Auth-Feature, Auth-API-Endpoints, .env-Variablen, Projektstruktur (user.py, auth.py, auth_service.py, Login.tsx, UserManagement.tsx), Workflow-Label in work
Dokumentation aktualisiert. Issue wird geschlossen. Geänderte Docs: - README.md: Auth-Feature, Auth-API-Endpoints, .env-Variablen, Projektstruktur (user.py, auth.py, auth_service.py, Login.tsx, UserManagement.tsx), Workflow-Label `in work`
Basti closed this issue 2026-03-30 17:16:03 +00:00
Sign in to join this conversation.
No description provided.