Effective-permissions inspector #57
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#57
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Admins must be able to answer 'what can X actually see/do here?' — load-bearing for trust in the grant system (permissions.md §UI obligations).
Scope
Pond settings tool: pick a member (or 'public'/'signed-in') and optionally a page → show the resolved outcome (read/write/none) with the deciding grant highlighted ('page-level deny on Salaries') and the full decision chain; powered by a dedicated API endpoint returning the resolution trace (extend the shared algorithm with an explain mode).
Acceptance criteria
Technical notes
Dependencies
Depends on #51, #55.
Size: ~1 day
Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add
deanden), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.Umgesetzt in
f5f1310(Claude Opus 4.8), Pipeline komplett grün (CI + CD: Deploy Test, Smoke, Int-Promotion). Live auf Int verifiziert.Was #57 liefert
explainPageCapabilityliefert die Entscheidungskette (entscheidende Ebene + der einzelne entscheidende Grant) und teilt sich einen Codepfad mit dem booleschenresolvePageCapability(jetzt dünner Wrapper), sodass der Trace nie von echtem Zugriff abweichen kann. Unit-getestet gegen die permissions.md-Worked-Examples (inkl. „Trace-Outcome == boolescher Resolver").GET /ponds/:id/effective-permissions?subjectType=&subjectId=&pageId=(pond_admin-gated, nur der eigene Teich) löst als gewähltes Subjekt auf (User mit echtem Site-Admin-Flag / alle Angemeldeten / Öffentlichkeit), optional gegen eine Seite, und liefert read+write-Outcome plus den entscheidenden Grant angereichert um Subjekt-/Scope-Namen.EffectivePermissionsInspectorin den Teich-Einstellungen — Subjekt + optional Seite wählen → aufgelöstes Lese-/Bearbeiten-Verdikt, die entscheidende Ebene, und die entscheidende Regel als de/en-Satz (nutzt den #55-Satz-Renderer). Für Nicht-Admins ausgeblendet.Acceptance criteria
Live-Checks (Int): ben (Editor) → read/write allow (pond-level); public → read deny (default).
Tests: Explain-Unit-Tests;
inspector.e2e.db.test.ts(entscheidende Label-Regel, Pond-Basis, Public default-closed, pond_admin-Gating); Browser-Assertion im access-rules-Pack.