Multi-Tenancy
Alle AutoMate.API endpoints ontvangen automatisch tenant context via de x-tenant-id HTTP request header. De tenant ID wordt nooit als request body parameter geaccepteerd — dit is een architectureel principe dat consistent doorgevoerd is in alle endpoints.
Hoe het werkt
De TenantGuard global pre-processor (API/Src/AutoMate.API/Processors/TenantGuardProcessor.cs) verwerkt elk inkomend request:
Stap-voor-stap
Anonymous endpoints worden automatisch overgeslagen — de guard controleert op
IAllowAnonymousmetadata.Tenant extractie: de
x-tenant-idheader wordt gelezen. Voor de/userolesroute valt de guard terug op detenantidclaim uit het JWT token.Validatie: lege waarde of
Guid.Emptyresulteert in400 Bad Request. Ongeldig GUID formaat resulteert eveneens in400 Bad Request.Cross-tenant autorisatie (MSP scenario): als de header tenant ID verschilt van de token tenant ID, controleert de guard:
De aanroeper heeft een tenant record in de database
Het
TenantTypevan de aanroeper isMSPDe aanroeper heeft de
Automate365.Customers.ReadWriterolDe gevraagde tenant bevindt zich in
CustomerTenantsvan de MSP
Context doorgeven:
IMultiTenantService.SetTenantId()enSetTenantName()worden aangeroepen zodat downstream handlers de tenant context via DI kunnen opvragen.Logging: de tenant ID wordt gepusht naar de Serilog
LogContextalsTenantIdproperty, en opgeslagen inHttpContext.Items["TenantId"].
IMultiTenantService
De interface IMultiTenantService (API/AutoMate.API.Shared/IMultiTenantService.cs) biedt toegang tot de tenant context in endpoints en services:
IMultiTenantService is geregistreerd als Scoped service:
Gebruik in endpoints
Gebruik TryGetTenantId() wanneer de tenant context optioneel is. Gebruik GetTenantId() wanneer de tenant vereist is — deze method gooit een exception als de tenant niet is ingesteld.
Tenant configuratie opslag
Tenant configuraties worden opgeslagen in Azure Table Storage. De verbinding wordt geconfigureerd via TenantConfigurationStorage in de applicatieconfiguratie. ITenantRepository biedt toegang tot tenant records inclusief TenantType en CustomerTenants.
Richtlijnen voor nieuwe endpoints
Inject altijd
IMultiTenantServiceen gebruikGetTenantId()om de tenant op te halenNeem de tenant ID nooit op als property in request DTOs of request bodies
De
TenantGuardvalideert automatisch — geen extra validatiecode nodig in endpointsVermeld in de endpoint beschrijving: "Tenant ID wordt opgehaald uit de
x-tenant-idheader"