PRD: User account & configuration
| Module | User Management | PRD ID | PRD-USR-001 |
| Status | Ready to dev | FEAT | USR |
| Epic | — | Plane | BANA-1527 |
| Date | 2026-05-27 | Version | v1.0 |
| Packages | @nx/identity | URD | USR |
| Surface | Client · Owner/MgrBO · Ops | ||
| Owner | Phát Nguyễn | ||
What user account & configuration is
Every person on BANA owns exactly one durable user account: a system-generated ID that is never physically removed, even if the account is later dropped. One account can hold several login identifiers - username, email, phone - and no two accounts ever share the same username, or the same verified email or phone.
Every other module trusts the identity and scope User Management issues, so the account itself - along with its identifiers, profile, status, and personal settings - must exist before any role, employee, or customer can sit on top of it. Without a first-class account there is no stable subject to attach a role to, no way to be sure an email or phone truly belongs to whoever claims it, nowhere to keep a person's own preferences like language, and no guarantee account data survives a "delete". This PRD builds that foundation for the whole platform.
One user, from registration to daily use
A person registers with a username - the account, profile, identifiers, and a default user configuration set are created together. The user opens the profile page, edits their name and birthday, and uploads an avatar. In the top-right corner of the header, they click to change language - the interface switches and saves right away, and the choice carries over the next time they sign in. They add a new email; that identifier starts unverified and needs an OTP code before it verifies. Later, whoever is assigned account-management permission locks this account for an operational reason - the user can no longer sign in until unlocked, but all of the account's data is still there, nothing is lost.
The easiest thing to get wrong
Archived is terminal - there is no way back
An account's status lifecycle moves through activate, deactivate, block, and finally archive. The first three transition freely between each other, but archive does not - once archived, an account has no path back to any other status.
Whoever holds account-management permission needs to be clear on the distinction: deactivate or block for a temporary lock, and reach for archive only when the account is truly meant to end.