Files
minecraft-account-manager/design/us-005-user-dashboard.md
T
dmg b88097c15a
CI / validate (push) Successful in 5m13s
Release / release (push) Successful in 7m8s
feat(groups): add fail-closed admission management
2026-08-01 18:36:45 -04:00

43 lines
2.1 KiB
Markdown

---
type: User Story
title: Manage linked accounts from the dashboard
description: Authenticated users maintain their profile and active Java Edition accounts.
tags: [player, dashboard, minecraft, profile]
timestamp: 2026-08-01T22:34:31Z
story_id: US-005
status: verified
---
# User Story
As a registered player, I want to manage my profile and linked Minecraft accounts, so that my whitelist identity remains current.
# Acceptance Criteria
- [x] Given an authenticated user, then only their own profile, accounts, and IP observations are visible and mutable.
- [x] The user can update their preferred name.
- [x] The user can add Mojang-verified or explicitly confirmed accounts from an allowed network.
- [x] The user can soft-remove an active account.
- [x] The user can choose exactly one active primary account.
- [x] Removing a primary account promotes another active account when one exists.
- [x] Name and primary changes preview the expected Discord nickname and require explicit confirmation before either profile mutation occurs.
- [x] The dashboard shows recent portal and game IP observations with classification and available location.
- [x] The dashboard shows the user's Discord display name, username, guild nickname, and immutable Discord ID.
- [x] The dashboard shows effective access groups and whether each group grants Minecraft access.
- [x] The user can revoke the current session by signing out.
# Implementation
- [`apps/web/src/app/account/page.tsx`](../apps/web/src/app/account/page.tsx)
- [`apps/web/src/app/account/actions.ts`](../apps/web/src/app/account/actions.ts)
- [`apps/web/src/app/auth/actions.ts`](../apps/web/src/app/auth/actions.ts)
# Validation
Server actions verify the current session, constrain every account lookup by the authenticated user ID, and require the explicit Discord confirmation field before name or primary-account mutations. Confirmation parsing is covered by [`apps/web/src/lib/dashboard-change-confirmation.test.ts`](../apps/web/src/lib/dashboard-change-confirmation.test.ts).
# Related Stories
- [Synchronize Discord nicknames](us-006-discord-nickname.md)
- [Enrich login IPs](us-007-ip-intelligence.md)