3.2 KiB
3.2 KiB
type, title, description, tags, timestamp, story_id, status
| type | title | description | tags | timestamp | story_id | status | ||||
|---|---|---|---|---|---|---|---|---|---|---|
| User Story | Manage groups efficiently | Administrators use concise policy tables, focused group details, and confirmed modal workflows to manage access groups. |
|
2026-08-02T15:03:59Z | US-019 | verified |
User Story
As an administrator, I want a concise group policy table and focused group details, so that I can manage access without navigating cumbersome controls.
Acceptance Criteria
- The main Groups page lists name, Minecraft access, VPN/proxy/Tor access, and effective member count with the default group first and remaining names ordered alphabetically.
- Policy controls show their current state and require confirmation in an accessible modal before mutation.
- Selecting a group name opens a detail page with its description, policies, and effective members.
- Add group opens an accessible modal asking for name, description, Minecraft access, and VPN/proxy/Tor access.
- New-group policies default to denied and can be enabled before creation.
- Administrators manage only the display name; an internal collision-safe slug is generated automatically.
- Administrators can edit group name and description; the protected
everyonename remains fixed while its description remains editable. - Non-default groups can be deleted only after modal confirmation, returning all affected users to
everyone. - Group identity, policy, creation, and deletion mutations commit atomically with their audit events.
- Modal controls support keyboard operation, focus management, cancellation, and clear pending state.
- Group details summarize recurring UTC access windows in the browser's local timezone.
- Administrators use a confirmed modal to add, remove, and replace multiple non-overlapping windows.
Implementation
apps/web/src/app/admin/(console)/groups/page.tsxapps/web/src/app/admin/(console)/groups/[groupId]/page.tsxapps/web/src/app/admin/(console)/groups/actions.tsapps/web/src/components/admin-modal-form.tsxapps/web/src/components/group-policy-control.tsxapps/web/src/components/group-schedule-editor.tsxapps/web/src/lib/group-management.ts
Validation
Native-dialog interaction and pending-state behavior are covered by apps/web/src/components/admin-modal-form.test.tsx. Slug, return-path, protected-name, and effective-membership behavior are covered by apps/web/src/lib/group-management.test.ts. TypeScript, lint, accessibility review, Semgrep, production build, and OKF validation pass.