Label- and page-scope grants UI including deny #55
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#55
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
The vision's fine-grained cases ('all pages except label X', 'only label Y') need an admin surface that regular humans can operate.
Scope
Pond settings 'Access rules': per member (and the pseudo-subjects 'all signed-in users', 'public') show the effective base role and a rule list; add scoped rules — pick scope (label from tree / specific page), role, allow/deny — with plain-language sentence rendering ('Anna may not edit pages labeled confidential'); page-level shortcut: a 'permissions' section in page settings showing rules affecting this page with add-rule.
Acceptance criteria
Technical notes
Dependencies
Depends on #52, #54.
Size: ~2 days
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
406886c(Claude Opus 4.8). Pipeline nach einem Runner-Infra-Ausfall (volle Runner-VPS-Platte → korrupter Docker-/Action-Cache; behoben durch Aufräumen + Neustart) aufe62fdcd(identischer Baum) komplett grün (CI Lint/typecheck/test + alle e2e-Packs, CD Deploy Test/Smoke/Int-Promotion). Live auf Test und Int verifiziert.Was #55 liefert
apps/web/src/access/AccessRulesManager) in den Teich-Einstellungen: pro Subjekt (Mitglied + Pseudo-Subjekte „Angemeldete"/„Öffentlich") die Regeln als lesbare de/en-Sätze („Anna darf Seiten mit dem Label „Vertraulich" nicht bearbeiten."), Add-Formular (Scope = Label aus dem Baum oder Seite, Recht, Erlauben/Verbieten).isRuleShadowed), wenn eine neue Regel von einer spezifischeren bestehenden überschrieben würde; Public-Bestätigung vor dem Öffnen für alle.GET /ponds/:id/grants/access-rules(pond_admin): Grants angereichert um Subjekt-/Scope-Namen (batched). Grant-Semantik bleibt der geteilte Resolver (permissions.md) — die UI erfindet nichts.Acceptance criteria
fixture-viewerliest nur die gelabelten Seiten).Live-Checks:
GET /grants/access-rulesliefert angereicherte Regeln (Int: „Anna Test"/pond_admin + „Ben Test"/editor; Test: fixture-user).Tests: shared
conflicts.test.ts; api-DB-Fall für den angereicherten Endpoint (api-DB 162 grün); neuer Browser-Packaccess-rules(beide Muster + Effekt, Shadow-Hinweis, Public-Bestätigung) mit eigenem CI-Step; neuer Fixture-Userfixture-viewer.Hinweis: Der optionale In-Page-„permissions"-Shortcut aus dem Scope ist nicht Teil dieses Commits; page-scope-Regeln sind über die pond-weite UI voll konfigurierbar. Kann als kleines Folge-Issue nachgezogen werden.