Start here. This is the direct spoken answer to practice first.
Why this question matters
Tenant isolation is a system-wide boundary spanning identity, queries, caches, search, files, messages, jobs, exports, observability, and administrative access. A missing tenant scope in any one path can become a cross-customer incident.
I would derive tenant context from authenticated membership or trusted server-side routing, not from a raw tenant id supplied by the client. Every tenant-owned table would carry tenant scope, and API queries would filter by tenant and resource ownership. Authorization would check both the user's role and the specific resource. Cache keys, background jobs, exports, and search documents would also include tenant scope.