Multi-Tenancy & Isolasi
Bagaimana Synapse mengisolasi data antar pengguna dan mind — batasan keamanan dijelaskan.
Multi-Tenancy & Isolasi
Synapse bersifat multi-tenant: beberapa pengguna, masing-masing dengan beberapa mind, sepenuhnya terisolasi satu sama lain. Halaman ini menjelaskan model isolasi.
Hierarki Tenant
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)Level Isolasi
Level 1: Isolasi Pengguna
Setiap akun pengguna terisolasi. Alice tidak dapat:
- Melihat mind Bob
- Mengakses memori Bob (bahkan dengan JWT miliknya)
- Mendaftar info akun Bob
Diterapkan oleh: kolom user_id di semua tabel, JWT berisi user_id, semua
kueri memfilter berdasarkan user_id.
Level 2: Isolasi Mind
Dalam satu pengguna, setiap mind terisolasi. Mind A tidak dapat:
- Melihat memori Mind B
- Mengakses tugas, chat, skrip Mind B
Diterapkan oleh: kolom mind_id di semua tabel data, Mind Key berisi mind_id,
semua kueri memfilter berdasarkan mind_id.
Token Autentikasi
| Token | Cakupan | Apa yang dapat diakses |
|---|---|---|
| Mind Key | Satu mind | Hanya data mind tersebut |
| JWT | Akun pengguna | Manajemen akun (buat/daftar/hapus mind) |
| Computer Token | Satu komputer | Perintah komputer tersebut |
Akses Lintas-Mind
Dalam pengguna yang sama
Pengguna dapat mengakses semua mind mereka melalui JWT (mis. GET /minds
mendaftar semua). Tetapi untuk membaca/menulis data memori, mereka memerlukan
Mind Key spesifik.
Antar pengguna
Pengguna tidak dapat mengakses data satu sama lain — KECUALI mereka secara eksplisit berbagi mind melalui 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"}'Setelah dibagikan, Bob dapat mengakses Mind A melalui JWT miliknya (read-only jika role=read).
Batasan Keamanan
┌─────────────────────────────────────────────────┐
│ Synapse Instance │
│ ┌─────────────────────────────────────────┐ │
│ │ User Account Boundary │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Mind Bound. │ │ Mind Bound. │ │ │
│ │ │ (Mind Key) │ │ (Mind Key) │ │ │
│ │ │ │ │ │ │ │
│ │ │ Memories │ │ Memories │ │ │
│ │ │ Tasks │ │ Tasks │ │ │
│ │ │ Chat │ │ Chat │ │ │
│ │ │ Scripts │ │ Scripts │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘Pola Multi-Tenancy Umum
Pola 1: Satu Pengguna, Satu Mind
Paling umum untuk pengguna agen LLM individu.
- 1 akun pengguna
- 1 mind
- 1 Mind Key
- Semua memori dalam satu cakupan
Pola 2: Satu Pengguna, Beberapa Mind
Untuk pengguna dengan beberapa konteks (kerja, pribadi, proyek).
- 1 akun pengguna
- N mind (mis. "kerja", "pribadi", "proyek-x")
- N Mind Key
- Setiap sesi LLM menggunakan satu Mind Key
Pola 3: Mind Tim Bersama
Untuk tim yang berkolaborasi dalam suatu proyek.
- 1 pengguna membuat mind (mendapatkan Mind Key)
- Pembuat berbagi dengan anggota tim melalui JWT
- Semua anggota tim mengakses melalui JWT (atau Mind Key bersama)
Pola 4: Penyedia SaaS
Untuk aplikasi yang menyematkan Synapse sebagai lapisan memori mereka.
- Setiap pelanggan = 1 akun pengguna
- Setiap proyek pelanggan = 1 mind
- Aplikasi menyimpan Mind Key per pelanggan/proyek
- Isolasi penuh antar pelanggan
Verifikasi Isolasi
Tes: Mind Key tidak dapat mengakses mind lain
# 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)Tes: JWT tidak dapat membaca data memori langsung
# 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