Ga naar inhoud

Rollen & toegang

Rollen

RoleBeschrijving
analystread-only op eigen tenant
adminbeheerder eigen tenant — agents, rules, billing, identity
ownervolledige controle eigen tenant + role-management
auditorexterne accountant; bundle-export download via Auditor Workbench (TOTP-prod)
msp_operatorcross-tenant operator — uitsluitend /api/v1/msp/overview
(is_superadmin)platform-superadmin; alle MSP-endpoints + tenant-suspend

Endpoint-gates

Cookie-auth + tenant scope is de baseline voor alle user.* routes. Op top hiervan:

EndpointExtra gate
POST /api/v1/trust-score/weightsrole=admin|owner + TOTP-prod
POST /api/v1/auditor/bundlerole=admin|owner|auditor + TOTP-prod
GET /api/v1/auditor/bundles/:t/downloadatomic one-shot, 24h expiry
GET /api/v1/msp/overviewrole=msp_operator OR is_superadmin
POST /api/v1/agents/:id/console/startrole=admin|owner + TOTP-prod + reden ≥20 chars

Alle agentAuth.* routes (ingest, register, whoami, heartbeat) gaan via SHA-256 bearer-token check; geen role-check nodig.

TOTP purpose-buckets

Elke TOTP-gated actie heeft een eigen purpose zodat replay tussen features impossible is:

PurposeGebruikt door
console_sessionconsole-start
trust_score_weightsweights override POST
auditor_bundlebundle generation POST
force_updateforce-update push naar agents
unlock_evidenceAI evidence-pack content unlock

Een 6-cijferige code die geconsumeerd is voor console_session blijft 30 seconden lang ongeldig voor diezelfde purpose, maar IS gebruikbaar voor auditor_bundle in datzelfde 30-sec window — verschillende rij in consumed_totp_codes.

RLS

Elke tenant-tabel heeft ENABLE ROW LEVEL SECURITY met een tenant_isolation policy. Belangrijk: deze is defense-in-depth. set_config('app.current_tenant', …, true) overleeft pgxpool’s connection-recycling niet, dus elke productie-query MOET expliciet WHERE tenant_id = $1 bevatten.

Uitzondering: hub-side workers (TrustScoreWorker, IdentityHygieneWorker, SupplyChainWorker, CorrelationWorker, AuthGeoWorker) draaien intentioneel cross-tenant — ze emitten/aggregeren per tenant via de inner-loop scope.

Audit log

Elke role-change, weights-update, bundle-creation/download, link-creation en delete-operation gaat via audit_log met event_type = <feature>.<action>. Filterbaar in de Audit-page (/audit).