Overview
Currently TUP operates as a single-tenant system. To position it as a SaaS product, multiple organizations need to be able to use the same deployment with fully isolated data, users, and detection policies.
Problem
- Single shared data store means all events are mixed together
- No concept of "organization" or "workspace"
- Impossible to resell or white-label without this
- API keys are global, not scoped to a tenant
Proposed Solution
Add a lightweight multi-tenancy layer at the tup-manager level using a workspace abstraction.
Data Model
Organization
└── Workspaces (1:N)
└── API Keys
└── Users (N:M)
└── Events
└── Detection Policies
└── Alert Rules
Changes Required
Backend (tup-manager)
Frontend (tup-dashboard)
Infrastructure
Security Considerations
- Row-level security (RLS) in PostgreSQL to enforce tenant isolation at DB level
- Workspace ID must be validated on every authenticated request
- Super-admin role for platform operators
Acceptance Criteria
Priority
🟠 Medium — required before any SaaS / commercial launch
Overview
Currently TUP operates as a single-tenant system. To position it as a SaaS product, multiple organizations need to be able to use the same deployment with fully isolated data, users, and detection policies.
Problem
Proposed Solution
Add a lightweight multi-tenancy layer at the
tup-managerlevel using a workspace abstraction.Data Model
Changes Required
Backend (tup-manager)
organizationsandworkspacestables to DB schemaworkspace_id/api/v1/workspacesCRUD endpointsFrontend (tup-dashboard)
Infrastructure
tup-collectorsendsworkspace_idin event payload.env.examplewithDEFAULT_WORKSPACE_NAMESecurity Considerations
Acceptance Criteria
Priority
🟠 Medium — required before any SaaS / commercial launch