# Çok Kiracılılık & İzolasyon Synapse çok kiracılıdır: birden çok kullanıcı, her biri birden çok mind ile, birbirinden tamamen izole. Bu sayfa izolasyon modelini açıklar. ## Kiracı Hiyerarşisi ``` 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) ``` ## İzolasyon Düzeyleri ### Düzey 1: Kullanıcı İzolasyonu Her kullanıcı hesabı izoledir. Alice şunları yapamaz: - Bob'un mind'lerini görmek - Bob'un belleklerine erişmek (JWT'si ile bile) - Bob'un hesap bilgilerini listelemek Şununla uygulanır: tüm tablolarda `user_id` sütunu, JWT `user_id` içerir, tüm sorgular `user_id` ile filtrelenir. ### Düzey 2: Mind İzolasyonu Bir kullanıcı içinde her mind izoledir. Mind A şunları yapamaz: - Mind B'nin belleklerini görmek - Mind B'nin görevlerine, sohbetine, betiklerine erişmek Şununla uygulanır: tüm veri tablolarında `mind_id` sütunu, Mind Key `mind_id` içerir, tüm sorgular `mind_id` ile filtrelenir. > [!CRITICAL] > Mind Key izolasyonu birincil güvenlik sınırıdır. Sızdırılan bir Mind Key, o mind'in verilerine tam erişim sağlar — ama SADECE o mind'e. ## Kimlik Doğrulama Token'ları | Token | Kapsam | Neyi erişebilir | |-------|-------|-------------------| | Mind Key | Tek mind | Yalnızca o mind'in verileri | | JWT | Kullanıcı hesabı | Hesap yönetimi (mind oluşturma/listeleme/silme) | | Computer Token | Tek bilgisayar | O bilgisayarın komutları | ## Mind'ler Arası Erişim ### Aynı kullanıcı içinde Kullanıcı JWT ile tüm mind'lerine erişebilir (örn. `GET /minds` hepsini listeler). Ancak bellek verilerini okumak/yazmak için belirli Mind Key gerekir. ### Kullanıcılar arası Kullanıcılar birbirlerinin verilerine erişemez — Sharing API ile açıkça bir mind paylaşmadıkça: ```bash # 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"}' ``` Paylaşımdan sonra Bob, JWT'si ile Mind A'ya erişebilir (`role=read` ise salt okunur). ## Güvenlik Sınırları ``` ┌─────────────────────────────────────────────────┐ │ Synapse Instance │ │ ┌─────────────────────────────────────────┐ │ │ │ User Account Boundary │ │ │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ Mind Bound. │ │ Mind Bound. │ │ │ │ │ │ (Mind Key) │ │ (Mind Key) │ │ │ │ │ │ │ │ │ │ │ │ │ │ Memories │ │ Memories │ │ │ │ │ │ Tasks │ │ Tasks │ │ │ │ │ │ Chat │ │ Chat │ │ │ │ │ │ Scripts │ │ Scripts │ │ │ │ │ └──────────────┘ └──────────────┘ │ │ │ └─────────────────────────────────────────┘ │ └─────────────────────────────────────────────────┘ ``` ## Yaygın Çok Kiracılılık Desenleri ### Desen 1: Tek Kullanıcı, Tek Mind Bireysel LLM ajan kullanıcıları için en yaygın olan. - 1 kullanıcı hesabı - 1 mind - 1 Mind Key - Tüm bellekler tek bir kapsamda ### Desen 2: Tek Kullanıcı, Birden Çok Mind Birden çok bağlamı olan kullanıcılar için (iş, kişisel, projeler). - 1 kullanıcı hesabı - N mind (örn. "work", "personal", "project-x") - N Mind Key - Her LLM oturumu bir Mind Key kullanır ### Desen 3: Ekip Paylaşımlı Mind Bir proje üzerinde işbirliği yapan ekipler için. - 1 kullanıcı mind'i oluşturur (Mind Key alır) - Oluşturucu, ekip üyeleriyle JWT üzerinden paylaşır - Tüm ekip üyeleri JWT (veya paylaşılan Mind Key) ile erişir > [!WARNING] > Bir Mind Key paylaşmak tam okuma/yazma erişimi verir. Ekip işbirliği için doğrudan Mind Key paylaşmak yerine Sharing API'yi (JWT tabanlı) tercih edin. ### Desen 4: SaaS Sağlayıcısı Synapse'i bellek katmanı olarak gömen uygulamalar için. - Her müşteri = 1 kullanıcı hesabı - Her müşteri projesi = 1 mind - Uygulama Mind Key'leri müşteri/proje başına saklar - Müşteriler arasında tam izolasyon ## İzolasyon Doğrulaması ### Test: Mind Key başka mind'lere erişemez ```bash # 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 doğrudan bellek verilerini okuyamaz ```bash # 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 ``` ## En İyi Uygulamalar > [!TIP] > - **Proje/bağlam başına bir mind kullanın** — izolasyon dostunuzdur > - **Mind Key'leri asla paylaşmayın** — bunun yerine Sharing API'yi kullanın > - **Tehlikeye girerse Mind Key'leri döndürün** (mind'i sil, yeni oluştur) > - **Paylaşılan mind'leri denetleyin** — `GET /sharing`'i periyodik olarak inceleyin > - **İnsan arayüzü için JWT kullanın** — Mind Key'leri son kullanıcılara asla göstermeyin ## Sonraki Adımlar - [Kimlik Doğrulama](/docs/getting-started/authentication) - [Mind Key ve JWT](/docs/getting-started/mind-key-vs-jwt) - [Mimari](/docs/concepts/architecture)