Access — Countries
Per-list, per-action roles. Roles do not stack: a user holds exactly one role on this list.
| User | Role | Granted by | Granted | Actions |
|---|---|---|---|---|
| Dana Okafor dana@northwind.example | — (creator) | 4 Aug 2026 | ||
| Marc Lindqvist marc@northwind.example | Dana Okafor | 5 Aug 2026 | ||
| Camille Roy camille@northwind.example | Dana Okafor | 6 Aug 2026 | ||
| Priya Raman priya@northwind.example | Marc Lindqvist | 7 Aug 2026 |
What each role can do
| Role | read | add / update / remove value | translate | update / delete list | manage_access |
|---|---|---|---|---|---|
| list-owner | ✓ | ✓ | ✓ | ✓ | ✓ |
| list-editor | ✓ | ✓ | ✓ | ✓ | — |
| list-contributor | ✓ | ✓ | — | — | — |
| list-translator | ✓ | — | ✓ | — | — |
| list-viewer | ✓ | — | — | — | — |
A translator renders an existing vocabulary in another language and must not be able to add or remove values — that is the whole reason the role exists separately from contributor.
States
Only you have explicit access
Everyone in the organization can already read this list — that is the default on create. Add people here to let them edit or translate it.
+ Add personCouldn't load access
No grants have been changed.
Test hooks: [data-frame='10-access-panel'] · [data-panel='access'] · [data-panel='role-matrix'] · [data-grant='usr_01h455vb4pex5vsknk084sn02q'] · [data-sole-owner='true'] · [data-role-select] · [data-role='list-translator'] · [data-action='revoke-access'] · [data-action='add-access'] · [data-case='last-owner'] · [data-error='CONFLICT'] · [data-error='FORBIDDEN'] · [data-state='empty'] · [data-state='error']
Contract: GET …/access · PUT …/access/{userId} · DELETE …/access/{userId}. Last-owner demote/revoke ⇒ 409 CONFLICT.
Tokens only — no raw hex, spacing or type outside tokens.css / frame.css.