Technical Article

Multi-Tenant Isolation: Two Working Answers

Fail-closed model-layer isolation on Omnitech CRM and row-based tenancy on IMFlow360 — two working answers to the same question.

Share this article

Every multi-tenant SaaS platform answers the same question — how is one tenant's data kept apart from another's, on a single shared codebase? — but the right answer depends on the platform's risk profile. Two platforms, Omnitech CRM and IMFlow360, answer it differently, and both answers are correct for what each platform needs.

01

Reading the work

Two isolation strategies, broadly

Multi-tenant platforms generally isolate tenants at one of a few layers: a separate database per tenant, a separate schema per tenant, or shared tables scoped by a tenant identifier at the application layer. Each has a different cost and a different failure mode; AWS's SaaS tenant-isolation guidance is a useful public reference for the tradeoffs between these strategies (cited below). Omnitech CRM and IMFlow360 both use shared-table, application-enforced isolation — but enforce it differently.

02

Reading the work

Omnitech CRM: fail-closed at the model and query layers

Omnitech CRM enforces tenant isolation at the model and query layers, including queued background work, on a fail-closed basis: if a query is missing its tenant scope, the request fails rather than risking a cross-tenant leak. A central permission registry — 126 permissions across 22 business modules — is kept deliberately separate from that isolation layer, so permissions can be broadened or narrowed for a role without ever touching the code path responsible for keeping tenants apart.

03

Reading the work

IMFlow360: row-based tenancy differentiated by business type

IMFlow360 takes a related but distinct approach: row-based multi-tenancy scopes every record by business and branch, while a business_type field — not a forked codebase — differentiates catalog, order, and workflow behavior for retail, restaurant, beauty/salon/spa, and appointment-based businesses. All four sectors run on one shared schema of roughly 146 tables. The isolation boundary is the same shared-table pattern as Omnitech CRM; the difference is that IMFlow360 also uses that same scoping mechanism to differentiate business behavior, not just to separate tenant data.

04

Reading the work

The actual lesson

Isolation strategy is a foundational decision made once, early, for the platform's risk profile — and it is a separate decision from the permission system layered on top of it. Both platforms enforce isolation in the application layer against shared tables; the difference between fail-closed enforcement scoped strictly to tenant boundaries, and row-scoping that also carries per-tenant behavior differentiation, comes down to what each platform needed the scoping mechanism to do beyond isolation itself.

Share this article

References

  1. SaaS tenant isolation strategies — AWS Whitepapers

Evidence and further reading

All insights →
Case studyOmnitech CRMMulti-tenant CRM and revenue platform with fail-closed tenant isolation, scoped permissions, configurable pipelines, lead conversion, and legacy-data migration. Case studyIMFlow360Multi-tenant SaaS POS platform pairing a Laravel cloud with an offline-first Flutter point-of-sale and a paired customer-facing display, serving retail, restaurant, salon/spa, and appointment businesses from one connected system. InsightInterim CTO vs Part Time CTO: Which One You NeedAn interim CTO fills a gap, a part time CTO shares the job and a fractional CTO owns it on a smaller budget. How to pick, and how each one should end.

Facing a similar problem?

Platform & Integration Review

For SaaS founders and engineering leads whose platform is getting slower and riskier to change.

Request an assessment

Let's build what's next

Have a complex system that needs to be built right?

Whether you are starting from an idea, replacing an existing platform, or scaling a system, let's talk.

Better Technology.
Brighter Possibilities.