Wielodostępność i izolacja
Jak Synapse izoluje dane między użytkownikami i umysłami — wyjaśnione granice bezpieczeństwa.
Wielodostępność i izolacja
Synapse jest wielodostępny: wielu użytkowników, każdy z wieloma umysłami, w pełni odizolowanych od siebie. Ta strona wyjaśnia model izolacji.
Hierarchia dzierżawców
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)Poziomy izolacji
Poziom 1: Izolacja użytkownika
Każde konto użytkownika jest izolowane. Alice nie może:
- Widzieć umysłów Boba
- Dostać się do wspomnień Boba (nawet ze swoim JWT)
- Wylistować informacji o koncie Boba
Wymuszane przez: kolumna user_id we wszystkich tabelach, JWT zawiera
user_id, wszystkie zapytania filtrują po user_id.
Poziom 2: Izolacja umysłu
W obrębie użytkownika każdy umysł jest izolowany. Umysł A nie może:
- Widzieć wspomnień umysłu B
- Dostać się do zadań, czatu, skryptów umysłu B
Wymuszane przez: kolumna mind_id we wszystkich tabelach danych, Mind Key
zawiera mind_id, wszystkie zapytania filtrują po mind_id.
Tokeny autoryzacyjne
| Token | Zakres | Do czego ma dostęp |
|---|---|---|
| Mind Key | Pojedynczy umysł | Tylko dane tego umysłu |
| JWT | Konto użytkownika | Zarządzanie kontem (tworzenie/lista/usuwanie umysłów) |
| Computer Token | Pojedynczy komputer | Polecenia tego komputera |
Dostęp między umysłami
W obrębie tego samego użytkownika
Użytkownik ma dostęp do wszystkich swoich umysłów przez JWT (np. GET /minds
wylistowuje wszystkie). Aby jednak odczytać/zapisać dane pamięci, potrzebny jest
konkretny Mind Key.
Między użytkownikami
Użytkownicy nie mają dostępu do danych innych — CHYBA że jawnie udostępnią umysł przez Sharing API:
# Alice udostępnia umysł A Bobowi
curl -X POST https://synapse.schaefer.zone/sharing \
-H "Authorization: Bearer ALICE_JWT" \
-d '{"mind_id": "m_aaa", "email": "bob@example.com", "role": "read"}'Po udostępnieniu Bob ma dostęp do umysłu A przez swój JWT (tylko do odczytu, jeśli
role=read).
Granice bezpieczeństwa
┌─────────────────────────────────────────────────┐
│ Synapse Instance │
│ ┌─────────────────────────────────────────┐ │
│ │ User Account Boundary │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Mind Bound. │ │ Mind Bound. │ │ │
│ │ │ (Mind Key) │ │ (Mind Key) │ │ │
│ │ │ │ │ │ │ │
│ │ │ Memories │ │ Memories │ │ │
│ │ │ Tasks │ │ Tasks │ │ │
│ │ │ Chat │ │ Chat │ │ │
│ │ │ Scripts │ │ Scripts │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘Typowe wzorce wielodostępności
Wzorzec 1: pojedynczy użytkownik, pojedynczy umysł
Najczęstszy dla indywidualnych użytkowników agentów LLM.
- 1 konto użytkownika
- 1 umysł
- 1 Mind Key
- Wszystkie wspomnienia w jednym zakresie
Wzorzec 2: pojedynczy użytkownik, wiele umysłów
Dla użytkowników z wieloma kontekstami (praca, życie prywatne, projekty).
- 1 konto użytkownika
- N umysłów (np. „work", „personal", „project-x")
- N Mind Key
- Każda sesja LLM używa jednego Mind Key
Wzorzec 3: współdzielony umysł zespołu
Dla zespołów współpracujących nad projektem.
- Jeden użytkownik tworzy umysł (otrzymuje Mind Key)
- Twórca udostępnia członkom zespołu przez JWT
- Wszyscy członkowie zespołu mają dostęp przez JWT (lub współdzielony Mind Key)
Wzoczec 4: dostawca SaaS
Dla aplikacji osadzających Synapse jako warstwę pamięci.
- Każdy klient = 1 konto użytkownika
- Każdy projekt klienta = 1 umysł
- Aplikacja przechowuje Mind Key per klient/projekt
- Pełna izolacja między klientami
Weryfikacja izolacji
Test: Mind Key nie ma dostępu do innych umysłów
# Klucz umysłu A nie może odczytać wspomnień umysłu B
curl -H "Authorization: Bearer mk_aaa..." \
"https://synapse.schaefer.zone/memory/search?q=test"
# Zwraca tylko wspomnienia umysłu A
curl -H "Authorization: Bearer mk_bbb..." \
"https://synapse.schaefer.zone/memory/search?q=test"
# Zwraca tylko wspomnienia umysłu B (różne wyniki)Test: JWT nie może odczytać danych pamięci bezpośrednio
# JWT może wylistować umysły
curl -H "Authorization: Bearer YOUR_JWT" \
https://synapse.schaefer.zone/minds
# Zwraca: listę umysłów
# JWT NIE MOŻE odczytać wspomnień (potrzebny Mind Key)
curl -H "Authorization: Bearer YOUR_JWT" \
https://synapse.schaefer.zone/memory/recall
# Zwraca: 401 Unauthorized