3.9 KiB
3.9 KiB
type, title, description, tags, timestamp, story_id, status
| type | title | description | tags | timestamp | story_id | status | ||||
|---|---|---|---|---|---|---|---|---|---|---|
| User Story | Manage users as an administrator | Authorized operators search users and maintain their names, linked accounts, primaries, and Discord nicknames. |
|
2026-08-07T23:02:04Z | US-013 | verified |
User Story
As an administrator, I want to manage a user's identity and Minecraft accounts, so that support issues can be resolved without direct database access.
Acceptance Criteria
- Administrators can search by preferred name, Discord username or ID, Minecraft username, or UUID.
- Search results show onboarding state, primary username, and active account count.
- A user detail view shows Discord display name, username, guild nickname, immutable ID, active accounts, groups, recent events, and recent IP observations.
- Each grouped recent address shows the latest observation's approximate location and classification, including clear, VPN, proxy, Tor, hosting, and unknown classifications.
- Missing IP enrichment is labelled as location unavailable and falls back to the stored observation classification.
- Address groups use the enrichment associated with their latest observation.
- Administrators can update the preferred name and synchronize Discord.
- Administrators can add Mojang-verified accounts or explicitly override an unverified username.
- Administrators can remove an account only after a visible confirmation step.
- Removing a primary account selects a replacement or falls back to the preferred-name nickname.
- Administrators can set a new primary account and automatically update Discord.
- Every action rechecks role and account ownership and records the acting administrator.
- Discord failures do not falsely persist the requested name, primary, or removal change.
- Each row in the administrator user registry shows the user's effective group in an accessible dropdown.
- Selecting a group immediately applies the assignment; selecting
everyoneremoves the explicit assignment. - Group changes preserve the active user search and show accessible success or error feedback.
- Registry assignment changes revalidate administrator authorization, user existence, and group existence, and audit the previous and new effective groups.
- User rows and group-assignment controls are reusable between the Users registry and group-member details.
- Group details show only the group's effective members with identity, Discord, primary-account, account-count, status, and group columns.
- Changing a user's group requires modal confirmation and choosing
everyoneremoves the explicit assignment. - Moving a member to another group removes that user from the current effective-member list after confirmation.
Implementation
apps/web/src/app/admin/(console)/users/page.tsxapps/web/src/app/admin/(console)/users/[userId]/page.tsxapps/web/src/app/admin/(console)/users/actions.tsapps/web/src/components/user-group-select.tsxapps/web/src/components/admin-user-table.tsx
Validation
Nickname fallback behavior is tested in packages/minecraft/test/minecraft.test.ts. Latest-observation enrichment and classification fallback are covered by apps/web/src/lib/access-address-groups.test.ts. The full 107-test suite, TypeScript, lint, OKF validation, and the production build pass.