Manage roles
2. Manage roles
Som Platform Admin har du adgang til alle tenants og kan tildele roller på tværs af platformen. Almindelige Tenant Owners kan kun manage roles inden for deres egen tenant — du kan ramme alt.
Rolle-modellen recap
Tre roller, hierarkisk på adgangs-niveau men ikke organisatorisk:
- Platform Admin — lever i
app-config(en YAML/JSON-fil tjekket ind i koden). Kan IKKE tildeles via UI — kræver kode-deploy. Eksempel: du, og måske et par kollegaer. - Tenant Owner — lever i
TenantRoles-tabellen, scope'et til en specifik tenant. Tildeles via UI af enten en anden Owner eller en Platform Admin. Kan tildele/fjerne Editors og andre Owners. - Editor — lever også i
TenantRoles, scope'et til en specifik tenant. Tildeles af Owner. Kan redigere content men ikke styre brugere eller site-config.
En person kan have forskellige roller på forskellige tenants — fx Owner på palle_jacobsen og Editor på nyborg_rideklub. Tildelinger er per-tenant, ikke globale.
Tildel roller via /admin/users
Platform admin har en global users-side der lister alle brugere på tværs af tenants:
/admin/users— viser email, antal tenants, roller pr. tenant- Klik på en bruger for at se detaljer: hvilke tenants, hvilken rolle hver, hvornår sidst aktiv (sidste login)
- Inline role-change — dropdown pr. tenant-row; vælg ny rolle og bekræft
- Remove all access — fjerner brugeren fra ALLE tenants på én gang (typisk når en medarbejder forlader)
Alle ændringer skrives til RoleAuditLog med actor (dig), timestamp, before/after-rolle. Audit-log er append-only og kan ikke redigeres fra UI.
Tildel via /admin/tenants//members
Alternativt: gå til en specifik tenant og manage dens medlemmer:
/admin/tenants/<slug>→ Members & access-fanen- Se alle TenantRoles for denne tenant
- + Invitér ny (samme flow som Tenant Owner ser)
- Ændre rolle inline
- Fjern med safety-confirm
Last-Owner-invariant
Det ER ikke muligt at:
- Fjerne den sidste Tenant Owner fra en tenant
- Demote den sidste Tenant Owner til Editor
Server-side check i tenant-roles.ts:setTenantRole() afviser begge cases med en 409 Conflict. Det betyder en tenant altid har mindst én Owner — der er aldrig en tilstand hvor ingen kan tilføje nye roller.
Hvis Platform Admin har "låst alle ude" af en tenant ved en fejl (fx Owner-konto blev disabled i AAD), kan du tilføje en ny Owner via CLI:
npx tsx scripts/migrate-tenant-roles.ts add <tenant-slug> <user-email> Owner
Det bypass'er den normale safety-flow og logger det som manual override i audit-log.
Sletning af tidligere medarbejdere
Når en person forlader en kunde-organisation (eller jer):
- Find brugeren i
/admin/userspå email - Remove all access — fjerner alle TenantRoles
- Hvis de er Platform Admin: deploy code-ændring der fjerner deres email fra
app-config'splatformAdmins-liste - Hvis de er B2B-gæst og ikke længere har AAD-konto, ryd dem også fra Azure AD → External identities (separat fra TesseraCMS)
Husk audit-trail: TenantRoles-records bevares ikke efter fjernelse — kun audit-log husker hvem de var. Hvis du har brug for at se historisk "hvem havde adgang i marts", check RoleAuditLog.
Audit-log query
RoleAuditLog-tabellen er append-only. Hver ændring logger:
{
"partitionKey": "palle_jacobsen",
"rowKey": "<reverse-timestamp>_<uuid>",
"actor": "nis.simon.jacobsen@gmail.com",
"target": "nye-editor@example.com",
"action": "role_changed",
"beforeRole": "Editor",
"afterRole": "Owner",
"timestamp": "2026-06-05T14:32:11Z",
"reason": ""
}
Du kan query'e via UI (/admin/tenants/<slug> → Audit log-fanen) eller via Azure Storage Explorer mod tabellen direkte. Brug partitionKey til at filter pr. tenant og rowKey-range til tid.
Log-entries har reverse-timestamp i rowKey så nyeste først når du query'er ascending.
Platform Admin-tildeling
Der findes ingen UI for at tildele Platform Admin. Det er bevidst:
- Platform Admin ejer infrastrukturen → kræver kode-adgang
- Tildeling via kode → version-controlled audit-trail i git
- Forhindrer eskalering via kompromitteret UI-session
For at tilføje en ny Platform Admin:
- Open
src/lib/auth-server.ts(eller hvorplatformAdminEmailser konfigureret — tjek altid mest opdaterede location) - Tilføj email til array'et
- Commit + push → GitHub Actions deployer → den nye admin har adgang efter ~3 min
Fjernelse: omvendt proces. Fjern email, commit, push.