User Journey: Rescue access
Table of Contents
This page documents a user journey: A tenant administrator sends a recovery link and locks or unlocks an account.
A user journey describes what one person is trying to do, before anything is built. It is a design document that outlives any sprint, so it names the screens, the entity fields each screen shows, and the operations and messages each step needs.
1. Goal
"I want to get my colleague back into the system, or shut the account down." The administrator confirms the account and sends a single-use recovery link to its address, then locks or unlocks the account. The colleague sets their own password at the link, so the administrator never learns it. The journey is done when the link has gone and the account's state is right, or when the account is shut and the administrator has said why.
2. Actor and trigger
The tenant administrator: an account inside the tenant that holds
iam::accounts:reset_password, iam::accounts:lock and
iam::accounts:unlock. The trigger is a support call, because a colleague is
locked out, or because a compromise is suspected. It starts when the
administrator opens Rescue access for one account, and ends when the account
is usable or shut.
This is the administrative half of the credentials topic. The member's own half is Protect my account, and the record of what happened is Audit sign-ins.
3. Steps
- Find the colleague. The administrator opens the screen from the account list and reads the account: username, full name, type and email. The system resolves the account and shows its security state beside it.
- Read the security state. The administrator reads whether the account is locked, the failed attempt count, the last sign-in and whether a password change is required. A run of failed attempts tells the administrator which story this is.
- Send a recovery link. The administrator confirms the address on the account and sends a single-use, time-limited link to it. The system emails the link and records that it was sent, so the record says who asked and when. The administrator types no password.
- The colleague sets their own password. The colleague opens the link and chooses a password the administrator never sees. Nothing on the administrator's screen forces this: the link is the whole mechanism, and the password-reset flag is not needed to make it happen.
- Lock or unlock. The administrator locks an account that must be shut, or unlocks one that was locked by failed attempts. The system writes the lock flag on the login record, and clears the failed attempt count on unlock.
- Leave. The administrator goes back. The account list shows the new state.
An account whose mailbox cannot receive is the one case the link cannot serve. It has no fallback on the screen: an administrator who types a colleague's password knows that password, and the platform has no way to record that, so the screen does not offer it. Decided 2026-10-01, when the build answered the question the prototype raised.
4. Screens and wireframes
One screen. The account being rescued, its security state, the recovery action and the lock actions are panels of that screen, because the administrator thinks of them as one decision. The administrator types no password, and no fallback offers one.
Figure 1: Rescue access: the account, its security state, the recovery action and the lock controls.
5. Prototype
Accepted by the product owner on 2026-09-30: variant B, diagnose then act. The
prototype is merged into main and kept there as the record; the branch names
the accepted state.
- Accepted commit
3f974a113f, the tip ofprototype/rescue-access, merged intomain- Accepted variant
b- Source
doc/prototypes/credentials/rescue-access/index.html- Open
/OreStudio/doc/prototypes/credentials/rescue-access/once the site is built, or the file directly- Design record
- Task: Prototype Rescue access
6. Entities composed
| Entity | What it contributes | Model |
|---|---|---|
account |
Username, full name, type and email; the account being rescued | ores.iam.account |
login_info |
Locked, failed attempts, last sign-in, reset required | ores.iam.login_info |
The screen writes no password and reads none back, so password_hash,
password_salt and totp_secret stay off it. The link goes to account.email,
which the screen shows and does not edit. A recovery token is not an entity a
screen shows: it exists for one delivery and one use, so nothing on this page
displays one.
7. Operations and messages
| Step | Operation | Subject | Status |
|---|---|---|---|
| Find the colleague | List the accounts | iam.v1.accounts.list |
exists |
| Find the colleague | Read one account | iam.v1.accounts.get |
exists |
| Read the security state | Read the login record | iam.v1.login_info.get |
exists |
| Send a recovery link | Request a password reset | none | missing |
| Send a recovery link | Email the link | none | missing |
| The colleague completes it | Set the password from the token | none | missing |
| Lock the account | Lock the account | iam.v1.ops.lock_account |
exists |
| Unlock the account | Unlock the account | iam.v1.ops.unlock_account |
exists |
| Activate or deactivate the account | Change the account state | none | missing |
The write subjects are declared in
ores.iam.account_messages.
iam.v1.ops.lock_account needs iam::accounts:lock,
iam.v1.ops.unlock_account needs iam::accounts:unlock, and
iam.v1.ops.reset_password needs iam::accounts:reset_password. A tenant
administrator who holds the role has all three, and the first two are the
journey's writes. The third has no caller in this journey any more: the link flow
replaced it, and the decision that the administrator never sets a password is
recorded above.
8. What is missing
- No recovery path of any kind. Nothing lets a member who cannot sign in
recover, and nothing lets an administrator start it for them. There is no
request subject, no completion subject, no token store and no message path;
and nothing in the tree sends an email, so even a token would have no way to
reach the colleague. The candidate subjects are
iam.v1.accounts.request-password-resetandiam.v1.accounts.complete-password-reset, over a token store and a mail path. Both are new platform capability rather than a credentials screen, and sign-up verification will want the same machinery. - No activate or deactivate. An account has no active flag. The only state
an administrator can change is
login_info.locked. A lock can be lifted, but an account cannot be retired and later restored. - The reset flag has no caller, and the link flow does not need it.
password_reset_requiredexists onlogin_info, andaccount_operations_service::set_password_reset_requiredimplements the write, but nothing calls it: no NATS subject, noores.httproute and no other service. The link flow retires this journey's need for the flag, because the colleague chooses their own password at the link, so the candidate subject that the journey used to want is no longer part of it. The method stays as the only way to flag an account whose password must change. - Locking does not end sessions.
iam.v1.ops.lock_accountwrites the login record only. A session that is already signed in stays open until it expires. The candidate is the same session-end operation that Audit sign-ins needs.
9. Related journeys
- Protect my account — the member's own password change, when they can still sign in
- Audit sign-ins — the failed attempts and sessions that explain why this account is locked
- Bring someone in — create the account when the colleague in the support call has none
- Sign in — where the colleague's new password is first used
10. Related knowledge
11. See also
- Menu structure — the area the Rescue access screen belongs to, and its breadcrumb
- User Journeys