| name | theme-saas_workspace |
| description | Multi-tenant SaaS workspace palette: variants, pages, entities, and flows for building a varied team-collaboration app. Use when theme_preset is saas_workspace.
|
SaaS workspace theme
Domain
Multi-tenant B2B apps where data is scoped to an organization/workspace and
shared with invited members. The tenancy boundary (org โ workspace โ resource),
member roles, and per-seat billing are exactly where access and logic exploits
live โ this is the natural home for cross-tenant data bleed.
Application variants โ pick ONE per lab
Honor any hint in theme_free_text / custom_prompt; otherwise pick one.
- Project / task tracker โ projects, tasks, boards, assignees, comments.
- Docs / wiki workspace โ spaces, pages, nested docs, sharing, comments.
- Team chat โ channels, messages, threads, DMs, mentions.
- CRM โ accounts, contacts, deals/pipeline, activities, notes.
- Helpdesk-lite โ inboxes, conversations, assignment, internal notes.
Roles โ choose the set that fits the variant
- user (member) โ work inside their own org's workspaces and resources.
- service โ integrations / webhooks / scheduled jobs where relevant.
- admin (org owner) โ manage members, roles, billing, all org resources.
Most exploits run as member.
Candidate pages โ select a coherent subset
Size the subset to endpoint_count. Candidates: workspace switcher, dashboard,
project/space list, board or document view, resource detail (task/page/deal/
conversation), create resource, comments thread, members & invites, role
management, billing & plan, settings, notifications, search, profile, admin
org settings.
Candidate entities (seed tables) โ select what the variant needs
- users โ id, email, password_hash
- orgs โ id, name, plan, seats, owner_id
- memberships โ id, org_id, user_id, role (owner/admin/member), status
- workspaces / projects / spaces โ id, org_id, name, visibility
- resources โ id, workspace_id, kind, title, body, created_by, assignee_id
- comments โ id, resource_id, author_id, body, created_at
- invites โ id, org_id, email, role, token, expires_at, accepted_at
- api_tokens โ id, org_id, name, scope, last_used_at
Variant-specific resource flavor (CRM: accounts/contacts/deals; chat:
channels/messages; docs: pages with parent_id; helpdesk: conversations/messages).
Seed โฅ2 orgs, each with several members and resources, so cross-tenant
access is testable. Make IDs guessable/sequential where it sets up the exploit.
Candidate user flows โ select the ones matching chosen pages/features
- Switch workspace โ open a project/space โ view its resources.
- Create a resource (task/page/deal/conversation) โ assign it โ comment on it.
- Invite a teammate by email โ they accept โ they appear as a member.
- Change a member's role (owner/admin) โ their permissions update.
- Move/share a resource between workspaces in the same org.
- (billing) View the plan & seats โ upgrade tier โ seat count updates.
- (admin) Open org settings โ manage members, tokens, and billing.
Candidate endpoints โ a feature may span several
Endpoints are a shared surface, not owned 1:1 by a feature (a single feature
often spans several, and an endpoint can back multiple features). Pick a coherent
subset alongside the pages above. Grouped by area:
- workspaces / projects โ
GET /api/workspaces, GET /api/projects/{id}, POST /api/projects
- resources โ
GET /api/resources/{id}, POST /api/projects/{id}/resources, PATCH /api/resources/{id}, GET /api/projects/{id}/resources
- comments โ
GET/POST /api/resources/{id}/comments
- members / invites โ
GET /api/orgs/{id}/members, POST /api/orgs/{id}/invites, POST /api/invites/{token}/accept, POST /api/orgs/{id}/members/{uid}/role
- billing โ
GET /api/orgs/{id}/billing, POST /api/orgs/{id}/upgrade
- tokens โ
GET/POST /api/orgs/{id}/tokens
- admin โ
GET /api/admin/orgs, POST /api/admin/orgs/{id}/...
Where vulnerabilities fit naturally
- idor (tenant bleed) โ
GET /api/projects/{id}, /api/resources/{id}, /api/orgs/{id}/members โ read or edit another org's data by guessing IDs. This is the signature flaw of the domain.
- privilege_escalation โ memberโadmin/owner via role tamper, accepting an invite to elevate, or
POST .../members/{uid}/role on yourself.
- business_logic โ exceed paid seats by inviting past the limit, act on a workspace after losing access, reuse an expired/used invite token.
- auth_bypass โ use an org-scoped API token against a different org; reach admin org settings without owner rights.
- idor/business_logic โ move a resource into an org you don't belong to.
Diversity guidance
Pick ONE variant and a coherent subset โ a CRM and a team-chat app diverge
sharply in resources and pages. Size to endpoint_count; let theme_free_text
/ custom_prompt bias the variant and naming. Vary org sizes, role models, and
plan tiers so two SaaS labs feel like different products. Pairs naturally with
the existing tenant-bleed spec.