mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 20:42:43 +00:00
The lifecycle surface under /api/account. An owner offers read access to somebody already on the instance, the delegate accepts, either side ends it, and a browser session points itself at a record it has been granted. Ending a grant clears the acting-account carrier on every session of the delegate pointing at that record, in the same transaction that stamps the row. Split apart, a revocation would leave a browser inside a record it can no longer read: every request refused, the banner still naming the owner, nothing on screen able to explain it. Revocation has no step-up and no confirmation step. Reducing access must never be harder than granting it was. Grant management is non-delegable by construction rather than by a check: every route here resolves through bare requireAuth(), which refuses while the caller is acting on another account, so no code path through them runs as somebody else. The switch endpoint is the one actor surface, and it is the way back out. A delegate already inside a record renounces after switching out, one request, rather than the fail-closed default growing an exception that later gets widened. The state machine is not re-implemented anywhere: routes call the grant module's predicate and its transitions, and the session carrier has one writer.
1.2 MiB
1.2 MiB