Zeiterfassung für Wirtschaftsprüfer
Zeiterfassung für Projekte und Mitarbeiter einer Prüfungsgesellschaft · Von Grund auf gebaut, allein
Aktualisiert
Vorher
Mandanten, Projekte und Stunden lagen an einem Ort, an dem in der Firma jeder alles sehen und ändern konnte.
Nachher
87
Berechtigungs-Kästchen vor jedem Deploy gegen die Datenbank belegt; die 30 ohne Wirkung wurden ausgeblendet.
- 1Person:Inhaber
Baut Rollen mit Häkchen je Bereich (Mandanten, Projekte, Zeiten, Berichte) für Ansehen, Anlegen, Bearbeiten und Löschen.
- 2Person:Mitarbeiter
Bucht Stunden auf Mandant, Projekt und Aufgabe oder trägt Abwesenheit ein.
Software:Web-AppErinnert alle, deren Zeitnachweis vor der Frist noch leer ist.
- 3Person:Projektleiter
Genehmigt oder lehnt den Wochennachweis seines Projektteams ab.
- 4Software:Datenbank
Zeigt jeder Person nur, was ihre Rolle erlaubt: Mitarbeiter sehen ihre eigenen Stunden, Projektleiter ihr Team, Inhaber jeden Mandanten.
- 5Person:Inhaber
Liest Stunden nach Mandant, Projekt und Person in Dashboards und Berichten.
Gilt immer
- Früher konnte jeder in der Firma jeden Mandanten und die Stunden aller öffnen. Jetzt verweigert die Datenbank alles, was eine Rolle nicht erlaubt, selbst wenn die Oberfläche es anfragt.
- Vor jedem Push wird jede Rolle gegen eine isolierte Kopie der Datenbank getestet.
Problem
Eine Prüfungsgesellschaft verwaltete Mandanten, Projekte und Mitarbeiterstunden in einem Tool, in dem jede Person jeden Mandanten und die Zeiten aller anderen öffnen konnte.
Diagnose
Zugriffskontrolle versagt unbemerkt, wenn sie nur in der Oberfläche steckt. Deshalb musste jede Regel in die Datenbank und durch Tests belegt werden.
Abgewogene Optionen
Jede Rolle sieht andere Daten. Wo liegen die Zugriffsregeln?
Gewählt
In der Datenbank selbst, vor jedem Deploy für jede Rolle getestet
Die Oberfläche kann nichts preisgeben, was die Datenbank verweigert. Preis: ein Testlauf auf einer isolierten Kopie vor jedem Push.
Verworfen
Nur in der Oberfläche
Jemand konnte Daten sehen oder ändern, die die Oberfläche verbergen sollte.
Ein Datensatz wird nicht mehr gebraucht. Löschen oder behalten?
Gewählt
Archivieren und anonymisieren
Die Historie der Zeitnachweise bleibt erhalten.
Verworfen
Löschen
Löschen zieht die Historie der Zeitnachweise mit.
Lösung
Eine Single-Page-Web-App auf verwaltetem Postgres. Jede Zugriffsregel liegt in der Datenbank und wird vor jedem Deploy durch eine automatische Rollenmatrix belegt.
- App
- React
- Vite
- TanStack Router
- TanStack Query
- shadcn/ui
- Chart.js
- Daten und Sicherheit
- Supabase
- PostgreSQL row-level security
- Edge Functions (Deno)
- Hosting
- Cloudflare
- Qualität
- GitHub Actions
- Role-matrix tests
- Vitest
- Property-based tests
- Accessibility tests
Ähnliche Leistungen
Kennzahlen: Automatischer Rollentest, 2026-09-25