dorfteich/packages/shared/i18n/de/members.json
Claude Opus 4.8 7f1c49db53
All checks were successful
CD / Build and push images (push) Successful in 3m3s
CI / Lint, typecheck, test (push) Successful in 2m29s
CI / Auth e2e pack (push) Successful in 3m8s
CI / Build container images (push) Has been skipped
CD / Deploy to Test (push) Successful in 9s
CD / Smoke tests against Test (push) Successful in 1m12s
CD / Promote to Int (push) Successful in 12s
Add pond member management UI (#54)
Pond Admins manage who participates in a pond, by role, with editor/reader
seat quotas — the member-facing layer over the grant model (#51/#52).

- shared: `MemberView`/`PondMembersView` + add/change-role schemas
  (`members.ts`), a `members` i18n namespace (de+en), and member error codes.
- api `members/`: a member-centric API over pond-scope user grants —
  `GET /ponds/:id/members` (any member, for transparency: list grouped by
  effective role + seat usage + `canManage`), `POST` (add by exact username or
  e-mail — no directory browsing), `PATCH :userId` (change role), `DELETE
  :userId` (remove), all Pond-Admin-gated by the guard. Editor/reader seats are
  enforced against `editors_per_pond`/`readers_per_pond` (#22) inside a
  per-pond advisory-locked transaction so counts cannot race; the owner's
  membership is protected, personal ponds refuse a second admin (shared grant
  rule), and the last Pond Admin cannot be dropped. Every change invalidates
  the pond permission cache and fires the access NOTIFY (#39/#53).
- web `members/`: `MemberManager` in Pond Settings — list grouped by role with
  a search filter and seat usage, add-by-identifier form (disabled with a
  localized explanation when the chosen role's seats are full), per-member role
  change and remove; read-only for non-admins; the personal-pond rule is
  surfaced. There is no invitation flow (v1): adding is immediate, and the copy
  says so.
- tests: `members.e2e.db.test.ts` (add/change/remove, seat exhaustion,
  personal-pond and owner rules, read-only transparency, last-admin) and a
  `members` browser pack (immediate second-browser access, quota disables the
  add action, non-admin read-only) with its own CI step.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
2026-07-09 20:22:52 +02:00

41 lines
1.4 KiB
JSON

{
"title": "Mitglieder",
"description": "Personen mit Zugriff auf diesen Teich. Wer hinzugefügt wird, hat sofort Zugriff — es gibt keine Einladung zum Annehmen.",
"roles": {
"pond_admin": "Admin",
"editor": "Bearbeiter",
"reader": "Leser"
},
"groups": {
"pond_admin": "Admins",
"editor": "Bearbeiter",
"reader": "Leser"
},
"ownerBadge": "Eigentümer",
"search": {
"placeholder": "Mitglieder durchsuchen …",
"empty": "Keine Mitglieder passen zur Suche."
},
"seats": {
"editor": "{{used}} von {{limit}} Bearbeiter-Plätzen",
"reader": "{{used}} von {{limit}} Leser-Plätzen"
},
"add": {
"title": "Mitglied hinzufügen",
"identifier": "Benutzername oder E-Mail",
"identifierPlaceholder": "Benutzername oder E-Mail",
"role": "Rolle",
"submit": "Hinzufügen",
"quotaFull": "Keine {{role}}-Plätze mehr frei. Entferne ein Mitglied oder bitte einen Site-Admin, das Kontingent zu erhöhen."
},
"actions": {
"role": "Rolle",
"remove": "Entfernen",
"removeConfirm": "{{name}} aus diesem Teich entfernen?"
},
"personalPondNote": "Dies ist ein persönlicher Teich: nur der Eigentümer verwaltet ihn, ein zweiter Administrator kann nicht hinzugefügt werden.",
"empty": "Dieser Teich hat noch keine Mitglieder.",
"readOnlyNote": "Nur Teich-Admins können Mitglieder hinzufügen oder entfernen.",
"loadError": "Mitglieder konnten nicht geladen werden."
}