Multi-tenancy & isolatie
Hoe Synapse data isoleert tussen gebruikers en minds — uitleg van beveiligingsgrenzen.
Multi-tenancy & isolatie
Synapse is multi-tenant: meerdere gebruikers, elk met meerdere minds, volledig geïsoleerd van elkaar. Deze pagina legt het isolatiemodel uit.
Tenant-hiërarchie
Synapse Instance
│
├── User Account 1 (email: alice@example.com)
│ ├── Mind A (Mind Key mk_aaa...)
│ │ ├── Memories (only accessible via mk_aaa...)
│ │ ├── Tasks
│ │ └── Chat
│ └── Mind B (Mind Key mk_bbb...)
│ └── ... (isolated from Mind A)
│
├── User Account 2 (email: bob@example.com)
│ └── Mind C (Mind Key mk_ccc...)
│ └── ... (isolated from Alice's minds)
│
└── ... (more users)Isolatieniveaus
Niveau 1: Gebruikersisolatie
Elk gebruikersaccount is geïsoleerd. Alice kan niet:
- Bobs minds zien
- Bobs herinneringen benaderen (zelfs met haar JWT)
- Bobs accountinformatie tonen
Afgedwongen door: user_id-kolom op alle tabellen, JWT bevat user_id, alle
query's filteren op user_id.
Niveau 2: Mind-isolatie
Binnen een gebruiker is elke mind geïsoleerd. Mind A kan niet:
- Mind B's herinneringen zien
- Mind B's taken, chat of scripts benaderen
Afgedwongen door: mind_id-kolom op alle datatabellen, Mind Key bevat mind_id,
alle query's filteren op mind_id.
Authenticatie-tokens
| Token | Bereik | Wat het kan benaderen |
|---|---|---|
| Mind Key | Eén mind | Alleen die mind's data |
| JWT | Gebruikersaccount | Accountbeheer (minds aanmaken/tonen/verwijderen) |
| Computer Token | Eén computer | Die computer's commando's |
Cross-mind-toegang
Binnen dezelfde gebruiker
Gebruikers kunnen al hun minds benaderen via JWT (bijv. GET /minds toont allemaal).
Maar om memory-data te lezen/schrijven, hebben ze de specifieke Mind Key nodig.
Tussen gebruikers
Gebruikers kunnen elkaars data niet benaderen — TENZIJ ze expliciet een mind delen via de Sharing-API:
# Alice shares Mind A with Bob
curl -X POST https://synapse.schaefer.zone/sharing \
-H "Authorization: Bearer ALICE_JWT" \
-d '{"mind_id": "m_aaa", "email": "bob@example.com", "role": "read"}'Na het delen kan Bob Mind A benaderen via zijn JWT (alleen-lezen als role=read).
Beveiligingsgrenzen
┌─────────────────────────────────────────────────┐
│ Synapse Instance │
│ ┌─────────────────────────────────────────┐ │
│ │ User Account Boundary │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Mind Bound. │ │ Mind Bound. │ │ │
│ │ │ (Mind Key) │ │ (Mind Key) │ │ │
│ │ │ │ │ │ │ │
│ │ │ Memories │ │ Memories │ │ │
│ │ │ Tasks │ │ Tasks │ │ │
│ │ │ Chat │ │ Chat │ │ │
│ │ │ Scripts │ │ Scripts │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘Veelvoorkomende multi-tenant-patronen
Patroon 1: Eén gebruiker, één mind
Meest voorkomend voor individuele LLM-agent-gebruikers.
- 1 gebruikersaccount
- 1 mind
- 1 Mind Key
- Alle herinneringen in één scope
Patroon 2: Eén gebruiker, meerdere minds
Voor gebruikers met meerdere contexten (werk, persoonlijk, projecten).
- 1 gebruikersaccount
- N minds (bijv. "work", "personal", "project-x")
- N Mind Keys
- Elke LLM-sessie gebruikt één Mind Key
Patroon 3: Team-gedeelde mind
Voor teams die samenwerken aan een project.
- 1 gebruiker maakt de mind aan (krijgt Mind Key)
- Maker deelt met teamleden via JWT
- Alle teamleden benaderen via JWT (of gedeelde Mind Key)
Patroon 4: SaaS-provider
Voor apps die Synapse insluiten als hun memory-laag.
- Elke klant = 1 gebruikersaccount
- Elk klantenproject = 1 mind
- App slaat Mind Keys op per klant/project
- Volledige isolatie tussen klanten
Isolatieverificatie
Test: Mind Key kan andere minds niet benaderen
# Mind A's key cannot read Mind B's memories
curl -H "Authorization: Bearer mk_aaa..." \
"https://synapse.schaefer.zone/memory/search?q=test"
# Returns only Mind A's memories
curl -H "Authorization: Bearer mk_bbb..." \
"https://synapse.schaefer.zone/memory/search?q=test"
# Returns only Mind B's memories (different results)Test: JWT kan geen memory-data direct lezen
# JWT can list minds
curl -H "Authorization: Bearer YOUR_JWT" \
https://synapse.schaefer.zone/minds
# Returns: list of minds
# JWT CANNOT read memories (need Mind Key)
curl -H "Authorization: Bearer YOUR_JWT" \
https://synapse.schaefer.zone/memory/recall
# Returns: 401 Unauthorized