Site Admin: quota override management UI #58

Closed
opened 2026-07-04 14:52:29 +02:00 by fable-5 · 1 comment
Collaborator

Context

Site Admins tune quotas per user and per pond (kickoff: three-level ladder).

Scope

Admin area 'Quotas': view instance defaults (edit them here — moves the raw settings from #19 into a proper form), search users/ponds and set/clear per-user and per-pond overrides for every quota key, with effective-value preview and current usage display (pond_usage).

Acceptance criteria

  • override set → takes effect immediately (e2e: pond creation limit)
  • clearing an override falls back to the next ladder level (preview matches behavior)
  • usage column matches pond_usage and flags ponds over quota (soft warning; enforcement stays at consumption points)
  • all changes audit-logged

Technical notes

  • data-model.md §Quotas, #22 (QuotaService is the only consumer path).

Dependencies

Depends on #22, #52.

Size: ~1 day


Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add de and en), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.

## Context Site Admins tune quotas per user and per pond (kickoff: three-level ladder). ## Scope Admin area 'Quotas': view instance defaults (edit them here — moves the raw settings from #19 into a proper form), search users/ponds and set/clear per-user and per-pond overrides for every quota key, with effective-value preview and current usage display (`pond_usage`). ## Acceptance criteria - [ ] override set → takes effect immediately (e2e: pond creation limit) - [ ] clearing an override falls back to the next ladder level (preview matches behavior) - [ ] usage column matches `pond_usage` and flags ponds over quota (soft warning; enforcement stays at consumption points) - [ ] all changes audit-logged ## Technical notes - data-model.md §Quotas, #22 (QuotaService is the only consumer path). ## Dependencies Depends on #22, #52. **Size**: ~1 day --- *Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add `de` **and** `en`), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.*
fable-5 added this to the M5 — Permissions & quotas milestone 2026-07-04 14:52:29 +02:00
fable-5 added the
backend
frontend
auth
labels 2026-07-04 14:52:29 +02:00
Collaborator

Umgesetzt in 6d3db7d (Claude Opus 4.8), Pipeline komplett grün (CI + CD: Deploy Test, Smoke, Int-Promotion). Live auf Test verifiziert.

Was #58 liefert

  • api admin/: QuotaAdminService + Site-Admin-gated /admin/quotasGET /admin/quotas/lookup?type=user|pond&q= (Username/E-Mail bzw. Slug → id+label), GET /admin/quotas/:type/:id (pro Quota-Key: override / instance-default / effektiv über die Drei-Ebenen-Leiter + Nutzung), PUT/DELETE :type/:id/:key (set/clear, audit-geloggt). Effektiv-Auflösung geht durch die vorhandene QuotaService (der einzige Consumption-Pfad), daher greift ein Override sofort; für einen Pond löst er über eigenen Override → Owner-Override → Default, passend zu den Consumption-Checks.
  • web: Admin-Bereich bekommt „Kontingente" — die Instanz-Standardwerte wandern in eine echte Zahlen-Eingabe-Form (vorher rohe Settings, #19), plus ein Per-Subjekt-Panel: User/Pond suchen, Leiter mit Nutzung anzeigen, Subjekte über ihrem effektiven Limit markieren, Overrides setzen/löschen. Neuer quotas-i18n-Namespace (de+en).

Acceptance criteria

  • Override gesetzt → wirkt sofort (e2e: Pond-Erstellungslimit — ein im Admin-UI erhöhtes additional_ponds lässt den Nutzer sofort einen weiteren Shared-Pond anlegen).
  • Override löschen → fällt auf die nächste Leiter-Ebene zurück (Preview = Verhalten; api-DB-Test).
  • Nutzungsspalte spiegelt pond_usage/Grants und markiert Über-Kontingent (Soft-Warnung; Enforcement bleibt an den Consumption-Punkten).
  • Alle Änderungen audit-geloggt.

Live-Check (Test): Quota-View für fixture-user liefert Defaults (5/50/0/1 GiB/25 MiB) + effektive Werte + Nutzung.

Tests: quota-admin.e2e.db.test.ts (Override → effektiv ändert sich sofort + QuotaService sieht es; Clear → Fallback; Lookup; Site-Admin-Gating); Browser-admin-quotas-Pack (UI-Override → sofort Pond-Erstellung erlaubt) mit eigenem CI-Step.

Umgesetzt in `6d3db7d` (Claude Opus 4.8), Pipeline komplett grün (CI + CD: Deploy Test, Smoke, Int-Promotion). Live auf Test verifiziert. **Was #58 liefert** - **api `admin/`**: `QuotaAdminService` + Site-Admin-gated `/admin/quotas` — `GET /admin/quotas/lookup?type=user|pond&q=` (Username/E-Mail bzw. Slug → id+label), `GET /admin/quotas/:type/:id` (pro Quota-Key: override / instance-default / **effektiv** über die Drei-Ebenen-Leiter + Nutzung), `PUT`/`DELETE :type/:id/:key` (set/clear, **audit-geloggt**). Effektiv-Auflösung geht durch die vorhandene `QuotaService` (der einzige Consumption-Pfad), daher greift ein Override sofort; für einen Pond löst er über eigenen Override → Owner-Override → Default, passend zu den Consumption-Checks. - **web**: Admin-Bereich bekommt „Kontingente" — die Instanz-Standardwerte wandern in eine echte Zahlen-Eingabe-Form (vorher rohe Settings, #19), plus ein Per-Subjekt-Panel: User/Pond suchen, Leiter mit Nutzung anzeigen, Subjekte über ihrem effektiven Limit markieren, Overrides setzen/löschen. Neuer `quotas`-i18n-Namespace (de+en). **Acceptance criteria** - [x] Override gesetzt → wirkt sofort (e2e: Pond-Erstellungslimit — ein im Admin-UI erhöhtes `additional_ponds` lässt den Nutzer sofort einen weiteren Shared-Pond anlegen). - [x] Override löschen → fällt auf die nächste Leiter-Ebene zurück (Preview = Verhalten; api-DB-Test). - [x] Nutzungsspalte spiegelt `pond_usage`/Grants und markiert Über-Kontingent (Soft-Warnung; Enforcement bleibt an den Consumption-Punkten). - [x] Alle Änderungen audit-geloggt. **Live-Check (Test):** Quota-View für fixture-user liefert Defaults (5/50/0/1 GiB/25 MiB) + effektive Werte + Nutzung. **Tests:** `quota-admin.e2e.db.test.ts` (Override → effektiv ändert sich sofort + QuotaService sieht es; Clear → Fallback; Lookup; Site-Admin-Gating); Browser-`admin-quotas`-Pack (UI-Override → sofort Pond-Erstellung erlaubt) mit eigenem CI-Step.
Sign in to join this conversation.
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stwaidele/dorfteich#58
No description provided.