feat(delegations): UI fuer Berechtigungs-Delegationen — Modul 2/16 des UI-Backlogs

Backend existierte vollstaendig (5 Endpoints: list/create/update/delete/
active-check, delegations:read/write seit Audit-Fix im Katalog), Frontend
hatte 0% Abdeckung. Modul folgt dem Approvals-Muster (Modul 1):

- api/delegations.ts: TanStack-Hooks (useDelegations mit direction-Filter,
useActiveDelegations, create/update/delete-Mutations mit Cache-Invalidierung)
- pages/Delegations.tsx: Richtungstabs (alle/von mir/an mich), Karten mit
  Phasen-Badges (aktiv/geplant/abgelaufen/inaktiv), Erstellen-Dialog mit
  Empfaenger-Picker (useUsers, sich selbst ausschliessend), Start/Ende-
  Datetime, Scope-Toggle (alle Berechtigungen), Aktivieren/Deaktivieren,
  Loeschen mit Confirm — Aktionen hinter delegations:write gegated
- Route /delegations (PermissionRoute delegations:read) — als Core-Route
  bewusst statisch registriert (Phase-Q-Regel: nur Plugin-Routen laufen
  ueber Manifeste) Sidebar-Entry order 92 (ArrowRightLeft-Icon)
- i18n delegations.* + nav.delegations de/en

Verifikation: Vitest 9/9 (Rendering, Tabs, Phasen, Permission-Gating,
Create-Flow, Toggle, Delete) · tsc exit 0 · production build exit 0.
This commit is contained in:
Agent Zero
2026-09-13 09:17:17 +02:00
parent b58c96ff71
commit 36771d471d
7 changed files with 752 additions and 3 deletions
+29 -1
View File
@@ -22,7 +22,8 @@
"tasks": "Aufgaben",
"wiki": "Wiki",
"systemDashboard": "System Dashboard",
"approvals": "Freigaben"
"approvals": "Freigaben",
"delegations": "Delegationen"
},
"auth": {
"login": "Anmelden",
@@ -1631,5 +1632,32 @@
"requesterUser": "Benutzer",
"requesterAgent": "Agent",
"requesterSystem": "System"
},
"delegations": {
"title": "Delegationen",
"tabAll": "Alle",
"tabFrom": "Von mir vergeben",
"tabTo": "An mich vergeben",
"create": "Delegation erstellen",
"createTitle": "Berechtigungen delegieren",
"createSubmit": "Delegieren",
"recipient": "Empfaenger",
"recipientPlaceholder": "Benutzer auswaehlen",
"startAt": "Beginn",
"endAt": "Ende",
"scopeAll": "Alle Berechtigungen delegieren",
"cardTo": "An {{user}}",
"cardFrom": "Von {{user}}",
"period": "Zeitraum:",
"phase_active": "Aktiv",
"phase_upcoming": "Geplant",
"phase_expired": "Abgelaufen",
"phase_inactive": "Inaktiv",
"activate": "Aktivieren",
"deactivate": "Deaktivieren",
"delete": "Loeschen",
"deleteConfirm": "Diese Delegation wirklich loeschen?",
"empty": "Keine Delegationen in dieser Ansicht.",
"loadError": "Delegationen konnten nicht geladen werden."
}
}
+29 -1
View File
@@ -22,7 +22,8 @@
"tasks": "Tasks",
"wiki": "Wiki",
"systemDashboard": "System Dashboard",
"approvals": "Approvals"
"approvals": "Approvals",
"delegations": "Delegations"
},
"auth": {
"login": "Sign In",
@@ -1631,5 +1632,32 @@
"requesterUser": "User",
"requesterAgent": "Agent",
"requesterSystem": "System"
},
"delegations": {
"title": "Delegations",
"tabAll": "All",
"tabFrom": "Given by me",
"tabTo": "Given to me",
"create": "Create delegation",
"createTitle": "Delegate permissions",
"createSubmit": "Delegate",
"recipient": "Recipient",
"recipientPlaceholder": "Select a user",
"startAt": "Start",
"endAt": "End",
"scopeAll": "Delegate all permissions",
"cardTo": "To {{user}}",
"cardFrom": "From {{user}}",
"period": "Period:",
"phase_active": "Active",
"phase_upcoming": "Upcoming",
"phase_expired": "Expired",
"phase_inactive": "Inactive",
"activate": "Activate",
"deactivate": "Deactivate",
"delete": "Delete",
"deleteConfirm": "Really delete this delegation?",
"empty": "No delegations in this view.",
"loadError": "Failed to load delegations."
}
}