Vergleich mit InvenTree, Snipe-IT, Grocy, Shelf.nu, Resgrid, KP Front, FleetMS, HiOrg-Server ergibt neue Kacheln (ASSET-010 Custody, FILE-008 Hash-Audit-Journal, FILE-009 Notizen, NOTIF-003, MAINT-007 Tankbuch, ZUST-003 Standort-Scoping, FOUND-007 Import/Export, FOUND-008 Fristen-Dienst, READY-006 Statistik-Dashboard, UI2-006..010) sowie Referenz-Ergänzungen bei bestehenden Lücken. Alle Design- Entscheidungen (Datenmodell, Sicherheitsanforderungen bei ASSET-010) geklärt. Neues Epic 23 (Flutter-Begleit-App, Sondierungs-Prototyp FLUT-001) inkl. geklärtem TLS-Blocker (Domain mabea.perlbach-edv.de mit Let's-Encrypt-Zertifikat statt selbstsigniertem Server-Zertifikat). Alle Kacheln bleiben offen/ungeplant, nur ausgearbeitet, keine Implementierung. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
127 lines
7.5 KiB
Markdown
127 lines
7.5 KiB
Markdown
# Epic 17 — Zuständigkeit
|
|
|
|
Details zu ZUST-001 … ZUST-003. ZUST-001/002 vollständig, ZUST-003 ergänzt am 2026-09-09
|
|
aus Open-Source-Vergleich, noch offen/ungeplant. Übernommen aus
|
|
`arbeitskarten/01_rollen_zuordnung.md`
|
|
und `arbeitskarten/04_organisationsstruktur.md` (Karte 01+04) — beide Karten hatten kein
|
|
Gegenstück im ursprünglichen 16-Epic-Backlog (siehe `00_index.md`, DECISION REQUIRED Punkt 5
|
|
war die Vorgängerlücke, diese hier ist die zweite gefundene Lücke).
|
|
|
|
---
|
|
|
|
## ZUST-001 — Objekt/Standort ↔ Verantwortlicher (Zuständigkeit)
|
|
|
|
- **Ziel:** Administrator kann Verantwortliche flexibel Standorten und/oder Objekten
|
|
zuordnen, ohne starre zentrale/dezentrale Struktur vorzugeben.
|
|
- **Beschreibung:** Zuständigkeit ist n:m (Verantwortlicher(e) ↔ Standort und/oder Objekt),
|
|
kein Hardcoding "eine Wache = ein Verantwortlicher". Ein Objekt kann mehrere
|
|
Verantwortliche gleichzeitig haben. Zuständigkeit vererbt sich vom Standort automatisch
|
|
auf alle Objekte an diesem Standort; eine zusätzliche objektspezifische Zuordnung ist
|
|
eine feinere Ergänzung obendrauf, kein Ersatz — Auswertelogik: ein Benutzer ist für ein
|
|
Objekt zuständig, wenn ENTWEDER eine Standort-Zeile für dessen Standort ODER eine
|
|
Objekt-Zeile für das Objekt selbst existiert (Vereinigung, keine Überschreibung).
|
|
- **Benutzerwert:** Verantwortlichkeiten lassen sich so einteilen, wie die Organisation
|
|
tatsächlich arbeitet, nicht wie ein starres Schema es vorgibt.
|
|
- **Abhängigkeiten:** FOUND-002, ASSET-003
|
|
- **Datenmodell:** `zustaendigkeit` (benutzer_id, standort_id NULLABLE, objekt_id NULLABLE)
|
|
- **Backend:** CRUD, Auswertelogik (Vereinigung Standort-/Objekt-Zuordnung)
|
|
- **Frontend:** Verwaltungs-UI (Liste + Suche)
|
|
- **Mobile:** keine eigene UI, wirkt sich auf Sichtbarkeit/Priorisierung aus
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** Verantwortlichkeitsbereich (FILE-004)
|
|
- **Rechte:** Administrator verwaltet
|
|
- **Audit:** Änderung geloggt
|
|
- **Akzeptanzkriterien:** Zuordnung auf Standort-Ebene wirkt auf alle zugehörigen Objekte,
|
|
zusätzliche Objekt-Zuordnung erweitert statt überschreibt.
|
|
- **Tests:** Vererbungslogik-Test (Standort-Zuordnung + separate Objekt-Zuordnung
|
|
gleichzeitig).
|
|
- **DoD:** deckt sich 1:1 mit MABEA (`Zustaendigkeit`-Tabelle, admin-UI mit Suche bereits
|
|
produktiv).
|
|
|
|
## ZUST-002 — Objekt ↔ Benutzer/Gruppe (Kontrollzuweisung, freiwillig)
|
|
|
|
- **Ziel:** Verantwortliche können Objekte gezielt einer Einzelperson oder Gruppe
|
|
zuweisen, ohne dass dies eine Pflichtkontrolle erzwingt.
|
|
- **Beschreibung:** Grundsätzlich darf jeder Mitarbeiter jedes Objekt kontrollieren (keine
|
|
feste Pflichtzuordnung). Zuweisung ist reine Empfehlung/Sichtbarkeit/Priorisierung, kein
|
|
Zugriffsschutz — Schutz vor Doppelarbeit übernimmt die Objekt-Sperre nach Scan/
|
|
Kontrollstart, nicht die Zuweisung.
|
|
- **Benutzerwert:** Klare Orientierung, wer für was zuständig ist, ohne andere
|
|
auszuschließen (wichtig bei Vertretung/Ausfall).
|
|
- **Abhängigkeiten:** ZUST-001, PERS-003 (Gruppe)
|
|
- **Datenmodell:** `kontrollverantwortung` (objekt_id, benutzer_id NULLABLE, gruppe
|
|
NULLABLE)
|
|
- **Backend:** CRUD
|
|
- **Frontend:** Verwaltungs-UI
|
|
- **Mobile:** zugewiesene Objekte ggf. hervorgehoben/priorisiert in der Liste
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** Verantwortlichkeitsbereich
|
|
- **Rechte:** Administrator/Verantwortliche verwalten, Mitarbeiter sieht alle Objekte
|
|
- **Audit:** Änderung geloggt
|
|
- **Akzeptanzkriterien:** Zuweisung sichtbar/priorisiert, verhindert aber nicht, dass ein
|
|
anderer Mitarbeiter das Objekt trotzdem kontrolliert.
|
|
- **Tests:** Zuweisungs-CRUD-Test.
|
|
- **DoD:** deckt sich 1:1 mit MABEA (`Kontrollverantwortung`-Tabelle, admin-UI bereits
|
|
produktiv).
|
|
|
|
## ZUST-003 — Standort-Scoping für granulare Berechtigungen (P2, neu, geklärt 2026-09-09)
|
|
|
|
- **Ziel:** Custom-Rollen-Berechtigungen (`Berechtigung`/`Rolle`/`RolleBerechtigung`,
|
|
Roadmap Phase 6) optional auf einen Standort/Depot einschränken können, statt immer
|
|
global zu gelten.
|
|
- **Bedarf: bestätigt (2026-09-09)** — echte Anforderung, kein rein hypothetisches
|
|
Feature.
|
|
- **Beschreibung:** Aktuell gilt jede über eine Custom-Rolle vergebene Berechtigung
|
|
systemweit — ein Nutzer mit „material.erstellen" darf das an JEDEM Standort, nicht nur
|
|
an dem, für den er zuständig ist. Erweiterung: optionales `standort_id` an
|
|
der Benutzer-Rollen-Zuordnung, `NULL` = weiterhin global (Rückwärtskompatibilität).
|
|
- **Benutzerwert:** Ein Materialwart kann Rechte für seinen Standort bekommen, ohne
|
|
automatisch auch an allen anderen Standorten schreiben zu dürfen — relevant, sobald
|
|
mehrere Standorte/Depots von unterschiedlichen Personen verantwortet werden.
|
|
- **Abhängigkeiten:** ZUST-001 (bestehendes Standort↔Verantwortlicher-Konzept), das
|
|
granulare Rechtesystem (`app/models/permission.py`)
|
|
- **Datenmodell (entschieden 2026-09-09): 1:1, einfache Spalte statt
|
|
Zwischentabelle** — `benutzer_rolle_zuordnung.standort_id` (FK, nullable),
|
|
`NULL` = global. Begründung: Personen wechseln typischerweise komplett den
|
|
Standort (dann wird der Wert einfach aktualisiert, kein Neuanlegen/Löschen
|
|
nötig) statt dauerhaft mehreren Standorten gleichzeitig zugeordnet zu sein.
|
|
Braucht eine Person doch mehrere Standorte gleichzeitig: einfach eine zweite
|
|
Rollen-Zuweisung mit anderem `standort_id` anlegen (Custom-Rollen sind bereits
|
|
mehrfach zuweisbar) — kein n:m-Konstrukt nötig, deutlich einfachere
|
|
Rechteprüfungs-Logik.
|
|
- **Backend:** Rechte-Check-Funktion (`require_roles_or_permission` o.ä.) um
|
|
Standort-Filter erweitern — prüft nicht nur „hat Berechtigung X", sondern „hat
|
|
Berechtigung X für Standort Y (oder global)"
|
|
- **Frontend:** `RolleSection.tsx` — Standort-Auswahl bei der Benutzer-Zuordnung
|
|
ergänzen (optional, Default weiterhin global)
|
|
- **Mobile:** kein Unterschied, wirkt sich nur auf Backend-Autorisierung aus
|
|
- **QR-Code/Seriennummer/Inventarnummer:** nein
|
|
- **Akte:** nein direkt
|
|
- **Rechte:** Verwaltung: Administrator
|
|
- **Audit:** Änderung der Standort-Zuordnung geloggt
|
|
- **Akzeptanzkriterien:** Nutzer mit standortgebundenem Recht kann an zugewiesenem
|
|
Standort handeln, an anderem Standort wird derselbe Endpunkt korrekt abgelehnt;
|
|
bestehende globale Zuordnungen (`standort_id IS NULL`) funktionieren unverändert.
|
|
- **Tests:** Positivtest (Standort passt), Negativtest (falscher Standort abgelehnt),
|
|
Regressionstest (bestehende globale Rechte weiterhin uneingeschränkt).
|
|
- **DoD:** offen — beide Design-Entscheidungen geklärt (2026-09-09), bereit für
|
|
Implementierung. **Referenz (Open-Source-Vergleich 2026-09-09):** keines der
|
|
verglichenen Projekte (InvenTree, Snipe-IT, Grocy, Shelf.nu, Resgrid, KP Front,
|
|
FleetMS) hat ein sauber dokumentiertes Standort-/Objekt-Ebene-Rechtesystem — Snipe-IT
|
|
nur grobes Company-Scoping, Shelf.nu nur personenbezogene Sichtbarkeits-Toggles. Wäre
|
|
bei Umsetzung eine echte Differenzierung ggü. allen verglichenen Projekten, kein
|
|
Nachbau.
|
|
|
|
---
|
|
|
|
**MABEA-Ist-Stand-Abgleich (aktualisiert 2026-09-09):** ZUST-001/002 sind bereits
|
|
vollständig umgesetzt und produktiv (`Zustaendigkeit` + `Kontrollverantwortung`, jeweils
|
|
mit Admin-UI). Diese Epic-Datei existierte bislang nicht — reine Nachdokumentation von
|
|
bereits gebauter Funktion, die im ursprünglichen 16-Epic-Backlog übersehen wurde.
|
|
ZUST-003 (Standort-Scoping für Berechtigungen) neu ergänzt am 2026-09-09 aus
|
|
Open-Source-Vergleich, offen/ungeplant.
|
|
|
|
## Referenzen
|
|
Alte Arbeitskarten (übernommen, Karten-Dateien gelöscht): Karte 01 Rollen&Zuordnung,
|
|
Karte 04 Organisationsstruktur/Zuständigkeit.
|