Ügyfélkontextus továbbadása
Egyszer ellenőrzött munkatérkontextust hoz létre és kifejezetten viszi át alkalmazáshatárokon veszélyes alapértelmezés nélkül.
tenant-context-propagation
Nézd meg, miben segítMikor hasznos?
Akkor használd, ha az ügyfélazonosság HTTP-kezelő, háttérfeladat, élő csatorna vagy parancssor között halad.
Miben segít neked?
- Elkülöníti a hitelesítést, tagságot és erőforrásjogosultságot.
- Alapértelmezett helyettesítés nélkül elutasítja a hiányzó vagy igazolatlan kontextust.
- Változatlan kontextust visz kéréseken, feladatokon és élő kapcsolaton át.
Például ezt kérheted
Kövesd a munkatér azonosságát HTTP-kéréstől az exportworkerig. A munkatérből indíts exportot, közben válts B-re. A feldolgozó őrizze az igazolt A-kontextust vagy hibázzon; az új kijelölést ne örökölje.
Részletes dokumentáció
Itt a skill eredeti útmutatóját, példáit és ellenőrzési szempontjait olvashatod az eredeti nyelven.
Összecsukás
Tenant Context Propagation
When to Use
Use when designing middleware, request context stores, repository layers, background job dispatchers, WebSocket handlers, or CLI commands in a multi-tenant application.
Core Principle: Separate Identity, Membership, and Permission
Every tenant-scoped operation must verify three distinct questions in order:
- Authentication (Who is the actor?): Validated
userId, service principal, or signed webhook identity. - Workspace Membership (Does this actor belong to
tenantId?): Verified active membership inworkspace_membershipsfor the requestedtenantId(and verified workspace state isactive). - Action & Resource Authorization (Can they perform this action on this resource?): Role/permission check plus verification that the target resource's
tenant_idequals the activetenantId.
Fail-Closed Context Resolution
1. Never Trust Unverified Client Tenant Hints or Fallback Defaults
- A subdomain, URL parameter (
/workspaces/:workspaceId), header (X-Workspace-Id), or body field is only a candidate hint until the server verifies active membership for the authenticated actor. - Fail-Closed Rule: If
tenantIdis missing, malformed, or unverified when a tenant-scoped repository, cache, or storage method is called, throw an explicit authorization/context error immediately. - Never fall back to a "default workspace," "first workspace of user," or omit the
WHERE tenant_id = ?filter whentenantIdisnullorundefined! (Watch out for ORMs where{ where: { tenantId: undefined } }silently strips theWHEREclause and returns all tenants' rows!)
2. Scoped Execution Context (AsyncLocalStorage / contextvars)
- Never store per-request
currentTenantIdon a singleton service instance, module-level global variable, or shared DB client property—concurrent requests will overwrite each other's tenant context! - Pass an explicit, immutable
TenantContext({ tenantId, actorId, actorType, membershipRole, requestId }) or bind it strictly to the async execution tree (AsyncLocalStoragein Node.js,contextvarsin Python,context.Contextin Go, request-scoped container in PHP/Laravel).
3. Distinguish Tenant-Scoped Calls from Explicit System Scopes
Legitimate cross-tenant operations (e.g., billing reconciliation cron, system migrations, global health metrics) must not use a backdoor tenantId = null:
- Require an explicit
SystemExecutionContext(scope: 'system',reason,actor) via a dedicated entry point so accidental omission of tenant context in user code still fails closed.
4. Rehydrate & Re-Verify Context in Async & Long-Lived Workers
When work crosses an execution boundary (BullMQ/SQS/RabbitMQ job, scheduled task, event listener, WebSocket message):
- At Enqueue Time: Serialize
{ tenantId, actorId, actorType, enqueuedAt }into the job envelope. - At Worker Execution Time:
- Initialize a fresh, isolated context scope for that single job and clear it in
finally. - Re-verify that the workspace is still
active(and, for user-delegated delayed actions, that the user's membership and permission have not been revoked since enqueue time) before executing mutations.
- Initialize a fresh, isolated context scope for that single job and clear it in
Csomagban lévő fájlok 1
SKILL.md
