Data Isolation
Virza enforces strict workspace-level data isolation. Every query, every search, and every AI operation is scoped to the workspaces you have access to. This is enforced at the database query layer, not just the API layer, so there is no path for data to leak between workspaces.
How isolation works
Every data operation in Virza includes a mandatory workspace filter:
- Documents: stored with a
workspace_idforeign key; all queries filter by allowed workspaces - Collections: scoped to a single workspace
- Notes: scoped to a single workspace
- Chat conversations: scoped to a single workspace
- Search results: filtered to your allowed workspaces before any results are returned
- File storage: stored in workspace-scoped paths (
workspaces/{workspace_id}/...)
Search isolation
Search queries are filtered at the database and search engine layers simultaneously:
- Meilisearch (keyword search): every query includes a mandatory
workspace_id IN [...]filter - pgvector (semantic search): every query includes a
WHERE workspace_id = ANY(...)clause - External search (Discover tab): searches public databases only, never your private workspace data
There is no “global search” across all workspaces. Each search is scoped to the workspaces your user account has been granted access to via workspace membership.
AI isolation
When you chat with Virza’s AI:
- Evidence retrieval only searches documents in your current workspace (or selected collection/document scope)
- AI models receive only the retrieved passages, never your full document library
- Responses are generated per-conversation and scoped to your workspace
Cross-workspace boundaries
- Documents cannot be moved between workspaces: they belong to a single workspace
- Collections cannot span workspaces: each collection belongs to one workspace
- Share links expose only the specific shared resource, not the workspace. Recipients see only what was shared.
- Workspace deletion permanently removes all workspace data (documents, collections, notes, conversations, member associations)
Workspace data is invisible across boundaries. If you’re a member of two workspaces (e.g., “Lab A” and “Project B”), documents in Lab A never appear in Project B’s search results, AI responses, or collection views, even though you have access to both.
For compliance teams
- Tenant isolation is enforced at the PostgreSQL query layer using row-level workspace scoping
- All API endpoints validate workspace membership before returning data
- Search engines (Meilisearch, pgvector) enforce workspace filtering as mandatory query parameters
- Presigned file URLs are generated per-request and scoped to workspace storage paths
- Audit logs track all data access by user and workspace