The administration surface for one organization. Roles come from the tenant's role catalogue — a bounded, policy-defined set, not free text.
4 people in Northwind
| Person | Role | Actions |
|---|---|---|
|
ada@northwind.example You
|
Admin | |
grace@northwind.example |
Admin | |
linus@northwind.example |
Editor | |
edsger@northwind.example |
Viewer |
Direct memberships only. This list shows this org's direct active memberships — one row
per organization_memberships row. Principals whose access comes from above (a
parent org, the platform root, or a reseller portal) are ReBAC-derived and have no membership row
here, so they do not appear — by omission, satisfying the "access from above is hidden"
requirement. Platform staff (Employee) are never listed here; their inherited access is surfaced only
in the separate, labelled staff console (design/frames/employee-console). If a future admin
surface ever needs to show inherited access, it must be a clearly separated, labelled panel — never
merged into this direct-member list.
Contract. Rows come from GET /v1/security/tenants/{tenantId}/members
(MemberPage — cursor-paginated; "Load more" advances page.cursor).
Role pills are keyed to GET /v1/security/tenants/{tenantId}/roles
(Role.key → Role.name). A member with no roles renders no pill, never a blank cell.
For the root/portal org — where "members = everyone" — this small-team list is replaced by the
paginated, searchable member directory (design/frames/member-directory).