Design: admins see everyone's home in "Personal" — scope admins by default, make backend access explicit? #177
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Cordy/Cairn#177
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Dogfood note (Nikola): "as an admin, I can see the user home folder of other non-admin users. This shouldn't be that blatantly possible; an admin should only see his own user-home within his Personal space."
Current behavior is by design, and documented: admins are unscoped (
scope.go: "Admins are NOT scoped: they address the whole backend directly"), so their "Personal" view IS the backend root —/home,/spaces, everything. The design rationale was operator simplicity (no per-file ACLs, the backend tree is the data model). The dogfood note says the presentation is wrong, and it is: an admin who wants their own files sees everyone's homes at eye level, and "Personal" lies about what it shows.Proposal for discussion (needs Nikola's call before any code):
/home/<admin>, their Spaces = their groups. Day-to-day file use looks identical for admins and users.Questions for Nikola:
Dogfood evidence (Nikola, v0.6.8). As an admin, the Shares tab lists shares I created across other users' homes, addressed by raw backend path:
Two things this shows:
/home/nikola-test2and/home/nikola-test/…and create share links for other users' files "this easily." That's exactly the concern here: admins operate on the whole backend as if it were their Personal space, with no explicit "I'm acting on the backend, not my own files" boundary./home/…path, not the virtual path — same display leak as #192 (which fixed the share-created toast, but explicitly deferred the Shares-tab list/revoke strings). Whatever scoping decision lands here should also decide how these rows render (virtual path, or an explicit "backend:" prefix for admin-scoped views).Feeds the design decision on this issue (scope admins by default; make backend-wide access an explicit mode).
Decision (Nikola): the strict model. Admins are scoped in the WebUI exactly like regular users — Personal = the admin's own
/home/<admin>, Spaces = the admin's own groups. There is no native Cairn path to browse another user's home or a space the admin isn't a member of. An admin who genuinely needs another user's data reaches it out-of-band: directly at the storage backend, using the deployment recovery key (the recovery-custody age identity that can decrypt any user's files). That break-glass is deliberate, manual, and outside the UI. (Q2 — gating a Backend view — is moot; there is no Backend view.)This is the "No backend file access" option, and it removes the whole-backend browser rather than hiding it behind a view.
Consequences to resolve during implementation (the unscoped admin path currently powers these — each needs a scoped answer or an explicit out-of-band story):
/home/<other>paths.Peering delivery and public share serving use the unscoped stack internally (server-side, not the admin UI) and are unaffected. Implementation will center on
scope.go(remove the admin exemption) + the nav/Shares surfaces; it's security-sensitive, so it lands with tests.