Use an indexed tenant_id payload field and scope every operation
The simplest pattern is one shared collection with a tenant_id payload field on every point, plus a payload index on tenant_id. Every tenant-scoped search, scroll, read, update, and delete should include the tenant filter. The index improves efficient tenant-aware filtering, but it is not an authorization boundary. I would derive tenant_id from authenticated server-side context rather than trusting a client-supplied value. Separate collections or deployments are alternatives when stronger administrative or resource isolation is required.
tenant_id should exist on every tenant-owned point and use a consistent type and format.
Trade-off: one collection is operationally efficient at large tenant counts; separate collections provide a stronger isolation boundary but increase lifecycle and index overhead.
Having an indexed tenant_id field does not make the data secure by itself; the application must actually apply the filter.
Centralizing Qdrant access in a repository or service layer makes accidental unscoped queries much harder to introduce.
0-2 years experience
2-5 years experience
5-8 years experience
8+ years experience