ExamNovaDocumentation
Offline readyChangelog
Developer guide

Tenant isolation, authorization, and security

Enforce the complete server-side boundary for every read, mutation, export, download, job, webhook, and integration call.

MaintainerIntegratorReviewer
Tenant authorization request flowEvery protected request must pass authentication, institute membership, permission, ownership, and record-state checks.RequestAuthenticateInstitutePermissionOwnershipStateAction
Tenant authorization request flow. Every protected request must pass authentication, institute membership, permission, ownership, and record-state checks.

Responsibility

A permission answers whether an actor may perform an action in principle. Institute membership, record ownership, relationship, subscription, and domain state determine whether that actor may perform it on this record now.

Components and data flow

Rules that must remain true

Failure modes

  • An unscoped find() creates cross-tenant exposure.
  • A hidden button without route authorization is bypassable.
  • Webhook retries without replay protection duplicate state changes.
  • Untrusted HTML, filenames, or URLs cross into a privileged context.

Safe extension guidance

  • Add explicit policy or middleware coverage for every new sensitive route.
  • Use validated DTO-like arrays from form requests rather than raw request input.
  • Record security-relevant decisions with redacted context and stable correlation IDs.
  • Design retention and deletion for every new category of private data.

Required tests

Release gate: A feature that lacks tenant, permission, ownership/state, and malicious-input tests is not ready for release.