Hvad er en Tenant Owner
1. Hvad er en Tenant Owner?
TesseraCMS har et 3-niveau rolle-system designet til SaaS-multi-tenant-drift. Hver rolle har et klart afgrænset scope og et klart sæt af handlinger den kan udføre.
De tre roller
| Rolle | Scope | Kan |
|---|---|---|
| Platform Admin | Globalt | Alle tenants' admin, opret/slet tenants, tildel Tenant Owners, alt en Tenant Owner kan + audit-logs på tværs |
| Tenant Owner | Per tenant | Egen tenants admin, redigér content, tildel både Owner + Editor til andre brugere på egen tenant, fjerne brugere (undtagen sidste Owner) |
| Editor | Per tenant | Egen tenants admin, redigér content. Ingen user-mgmt, ingen tenant-settings |
Hvor rollen kommer fra
Der er to forskellige storage-mekanismer:
Platform Admin
Lever som en AAD app-role på TesseraCMS-applikationen i Microsoft Entra ID. Tildeles én gang i Azure-portalen og bekymrer sig ikke om TesseraCMS' egen storage. Globalt og uafhængigt af tenant-data — også når storage er nede.
Tenant Owner + Editor
Lever i en custom Azure Table Storage-tabel kaldet TenantRoles:
PartitionKey: tenant-slug ("palle_jacobsen")
RowKey: user-object-id (AAD oid claim)
Fields: role, displayName, email, isGuest, assignedBy, assignedAt
Tildeles dynamisk via admin-UI uden Azure-runde. Dette gør tenants reelt self-managing — du behøver ikke kontakte Platform Admin hver gang du vil tilføje en editor.
Designprincipper
Mindste privilegier
Editor er content-only; Tenant Owner styrer egen tenant uden at se andre; Platform Admin er platform-wide. Hver rolle får kun de privilegier den behøver til sin opgave.
Fuld delegation
Tenant Owner kan tildele Owner — modsat en model hvor kun Platform Admin kan promote. Dette gør tenants reelt self-managing: du kan invitere en kollega som co-owner uden at involvere os.
Sidste-Owner-invariant
Pr. tenant skal der altid være ≥ 1 Owner. UI + backend afviser fjernelse hvis det ville bryde invarianten. Dette beskytter mod "lock yourself out"-scenariet hvor en tenant ender uden nogen der kan styre brugere.
Audit-trail er obligatorisk
Alle rolle-changes logges i RoleAuditLog-tabellen. Bruges både til debugging ("hvem fjernede mig?") og compliance.
Audit-trail
Hver rolle-ændring opretter en entry i RoleAuditLog:
- Hvem lavede ændringen (actor object-id + email)
- Hvem blev ramt (target object-id + email)
- Hvilken handling —
assigned,changed,removed - Fra hvilken rolle → til hvilken rolle (eller null hvis tilføjelse/fjernelse)
- Hvornår (ISO-timestamp)
Logen er append-only — entries kan ikke ændres eller slettes via UI. Du kan se de seneste 20 entries på /{tenant}/admin/users (kun synlig for Owners).
Platform Admin kan query'e log på tværs af tenants. Det giver os mulighed for at debug "hvorfor kunne X ikke logge ind sidste uge" uden at gætte.
Hvad du IKKE kan som Owner
- Oprette nye tenants — kun Platform Admin
- Slette tenants — kun Platform Admin (og kun med danger-zone confirm)
- Se andre tenants' data — du er fuldt isoleret
- Promote dig selv til Platform Admin — den rolle tildeles via Azure-portalen (uden for vores admin-UI)
- Bypass last-Owner invariant — selv som Owner kan du ikke fjerne den sidste owner
Hvis du har brug for noget af ovenstående, kontakt os (Platform Admin).