docs: DEVLOG – agent-10 Reseller/Mandantenübersicht
Security Audit / Node.js Dependency Audit (push) Has been cancelled
Security Audit / Python Dependency Audit (push) Has been cancelled

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 01:44:48 +02:00
co-authored by Claude Opus 4.8
parent 98cb2f867a
commit c3cb9ce073
+154
View File
@@ -2022,3 +2022,157 @@ Keine Commits in dieser Session.
- frontend/src/pages/TenantsPage.tsx | 255 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
---
## 2026-06-23 01:26 01:29 (3m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 28 ++++++++++++++++++++++++++++
- backend/app/routers/reseller.py | 8 +++++---
- backend/app/routers/tenants.py | 54 ++++++++++++++++++++++++++++++++++++------------------
- backend/app/schemas/auth.py | 5 ++++-
- backend/app/schemas/reseller.py | 13 ++++++++++---
- backend/app/services/tenant_service.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------
- backend/tests/test_reseller.py | 20 ++++++++++++++++++++
- frontend/src/pages/ResellerCompaniesPage.tsx | 45 +++++++++++++++++++++++++++++++++++++++++----
- frontend/src/pages/TenantsPage.tsx | 30 +++++++++++++++++++++---------
---
## 2026-06-23 01:36 01:38 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 28 ++++++++++++++++++++++++++++
- backend/app/routers/reseller.py | 8 +++++---
- backend/app/routers/tenants.py | 54 ++++++++++++++++++++++++++++++++++++------------------
- backend/app/schemas/auth.py | 5 ++++-
- backend/app/schemas/reseller.py | 13 ++++++++++---
- backend/app/services/tenant_service.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------
- backend/tests/test_reseller.py | 20 ++++++++++++++++++++
- frontend/src/pages/ResellerCompaniesPage.tsx | 45 +++++++++++++++++++++++++++++++++++++++++----
- frontend/src/pages/TenantsPage.tsx | 30 +++++++++++++++++++++---------
---
## 2026-06-23 01:38 01:39 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 28 ++++++++++++++++++++++++++++
- backend/app/routers/reseller.py | 8 +++++---
- backend/app/routers/tenants.py | 54 ++++++++++++++++++++++++++++++++++++------------------
- backend/app/schemas/auth.py | 5 ++++-
- backend/app/schemas/reseller.py | 13 ++++++++++---
- backend/app/services/tenant_service.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------
- backend/tests/test_reseller.py | 20 ++++++++++++++++++++
- frontend/src/pages/ResellerCompaniesPage.tsx | 45 +++++++++++++++++++++++++++++++++++++++++----
- frontend/src/pages/TenantsPage.tsx | 30 +++++++++++++++++++++---------
---
## 2026-06-23 01:40 01:40 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 28 ++++++++++++++++++++++++++++
- backend/app/routers/reseller.py | 8 +++++---
- backend/app/routers/tenants.py | 54 ++++++++++++++++++++++++++++++++++++------------------
- backend/app/schemas/auth.py | 5 ++++-
- backend/app/schemas/reseller.py | 13 ++++++++++---
- backend/app/services/tenant_service.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------
- backend/tests/test_reseller.py | 20 ++++++++++++++++++++
- frontend/src/pages/ResellerCompaniesPage.tsx | 45 +++++++++++++++++++++++++++++++++++++++++----
- frontend/src/pages/TenantsPage.tsx | 30 +++++++++++++++++++++---------
---
## 2026-06-23 01:41 01:41 (0m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 28 ++++++++++++++++++++++++++++
- backend/app/routers/reseller.py | 8 +++++---
- backend/app/routers/tenants.py | 54 ++++++++++++++++++++++++++++++++++++------------------
- backend/app/schemas/auth.py | 5 ++++-
- backend/app/schemas/reseller.py | 13 ++++++++++---
- backend/app/services/tenant_service.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------
- backend/tests/test_reseller.py | 20 ++++++++++++++++++++
- frontend/src/pages/ResellerCompaniesPage.tsx | 45 +++++++++++++++++++++++++++++++++++++++++----
- frontend/src/pages/TenantsPage.tsx | 30 +++++++++++++++++++++---------
---
## 2026-06-23 agent-10: Reseller-Rolle + Mandantenübersicht (Multimandanten)
**Ziel:** Mandantenfähigkeit ausbauen SUPER_ADMIN-Mandantenübersicht + neue
RESELLER-Rolle, die selbst angelegte Firmen verwaltet (nur Firmen-Ebene, DSGVO).
### Commits
- 898a81f feat: Reseller-Rolle + SUPER_ADMIN-Mandantenübersicht
- 98cb2f8 feat: Mandant/Reseller ohne E-Mail anlegbar (Temp-Passwort statt Einladung)
### Entscheidungen (mit User abgestimmt)
- Reseller = **nur Firmen-Verwaltung** (kein Zugriff auf personenbezogene Zeit-/
Abwesenheitsdaten) → DSGVO-sauber
- **Eigene Reseller-Oberfläche** (`/reseller`), keine Impersonation
- **Nur SUPER_ADMIN** legt Reseller an; Reseller-Firmen gehören automatisch ihm
### Backend
- Neue Rolle `UserRole.RESELLER` (company_id NULL); `companies.reseller_id` + `is_active`
- Migration **0034**: Enum-Wert + Spalten + RLS-Policies (companies/users zusätzlich
auf `app.reseller_id` gefenced → DB-seitige Mandantenisolation des Resellers)
- `get_current_user` setzt `app.reseller_id` + Bypass aus für RESELLER
- `tenant_service` (Firma + Erst-Admin), Router `/reseller/*` (Self-Service) und
`/admin/*` (SUPER_ADMIN: Mandanten + Reseller); Login-Sperre bei deaktiviertem Mandant
- **Ohne E-Mail anlegbar**: interne Login-Kennung `<name>@<slug>.local` + einmaliges
Temp-Passwort (kein Mailversand). `LoginRequest.email``str` (Kennung muss kein
zustellbares Postfach sein; reservierte `.local`-Domains sonst nicht einloggbar)
### Frontend
- `TenantsPage` (`/admin/tenants`): alle Firmen, Reseller zuordnen/anlegen, Aktiv-Toggle
- `ResellerCompaniesPage` (`/reseller`): eigene Oberfläche mit Firmen-Kacheln
- Rollenbasierte Login-Weiterleitung (RESELLER → `/reseller`); `CredDialog` zeigt
Temp-Zugangsdaten einmalig; Nav „Mandanten" für SUPER_ADMIN
### Tests & Deployment
- 5 neue pytest-Cases inkl. **Cross-Reseller-RLS-Isolation** + Anlage ohne E-Mail
(173/173 grün); conftest-RLS um Reseller-Policies erweitert
- Auf **137 + 164** deployed (Migration 0034, Dienste aktiv, Health ok)
- **Live-Smoke-Test** auf beiden Servern bestanden (8 Checks: Anlage ohne E-Mail,
Temp-Login, RLS-Isolation, 403-Schutz, Mandanten-Sperre) Testdaten danach gelöscht
---
## 2026-06-23 01:42 01:43 (1m)
**Beschreibung:** Claude Code Session
**Projekt:** timemaster
### Commits
Keine Commits in dieser Session.
### Geänderte Dateien
- DEVLOG.md | 28 ++++++++++++++++++++++++++++
- backend/app/routers/reseller.py | 8 +++++---
- backend/app/routers/tenants.py | 54 ++++++++++++++++++++++++++++++++++++------------------
- backend/app/schemas/auth.py | 5 ++++-
- backend/app/schemas/reseller.py | 13 ++++++++++---
- backend/app/services/tenant_service.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------
- backend/tests/test_reseller.py | 20 ++++++++++++++++++++
- frontend/src/pages/ResellerCompaniesPage.tsx | 45 +++++++++++++++++++++++++++++++++++++++++----
- frontend/src/pages/TenantsPage.tsx | 30 +++++++++++++++++++++---------
---