Ana içeriğe geç

Multi-Tenant İzolasyon

Genel İlke

Her katmanda kiracı (tenant) izolasyonu zorunludur. Bir kiracının verileri başka kiracı tarafından erişilemez.

API Katmanı

Her endpoint tenant_id dependency alır:

@router.get("/devices")
async def list_devices(
user: CurrentUser = require_permissions([Permission.READ_DEVICE])
):
# user.tenant_id otomatik olarak JWT'den çıkarılır
devices = await db.execute(
select(Device).where(Device.tenant_id == user.tenant_id)
)

Veritabanı Katmanı

35 tablo tenant_id kolonu içerir. Tüm sorgularda filtre zorunludur:

SELECT * FROM devices WHERE tenant_id = :tid AND id = :device_id

MQTT Katmanı

Topic'lerde tenant/{tid}/ prefix'i:

tenant/e7dcb56a-.../gw/235b492f-.../data/device/varkombi-001/realtime

ACL kuralları ile gateway sadece kendi tenant topic'lerine erişebilir.

WebSocket Katmanı

TenantRoom yapısı: Her kiracı ayrı odada, sadece kendi cihazlarının verilerini alır.

Yeni Endpoint Checklist

Yeni endpoint eklerken:

  1. Router'a tenant_id dependency ekle (genellikle CurrentUser ile otomatik)
  2. Tüm query'lerde WHERE tenant_id = :tid filtresi uygula
  3. MQTT topic'te tenant/{tid}/ prefix'i kullan
  4. WebSocket broadcast'te tenant room kontrolü yap