> ## Documentation Index
> Fetch the complete documentation index at: https://docs.azalt.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Organization User Site

> Organization User ile Site arasındaki ilişki (hiyerarşi farkındalığı ile site düzeyi erişim).

### Organization User Site

Bu bağ (junction) tablo, bir üyeliği (Organization User) bir veya daha fazla Site ile ilişkilendirir ve ayrıntılı site tabanlı erişimi sağlar.

```typescript theme={null}
// apps/azalt/src/server/db/types/organization.ts (özet)
interface OrganizationUserSite {
  id: string;
  organizationUserId: string; // OrganizationUser.id
  siteId: string;             // Site.id
  createdAt: Date;
  updatedAt: Date;
}
```

#### Kısaca

* Doğrudan atamaları saklar (üyelik → site)
* Etkin erişim = atanan site(ler) + tüm alt site(ler)
* Kök site ataması tüm organizasyona erişim verir
* `(organizationUserId, siteId)` çifti tektir; silmeler cascade ile temizlenir

#### Erişim Nasıl Hesaplanır?

* Doğrudan atamalar burada tutulur (`assignedSiteIds`).
* Etkin erişim, atanan site(ler)in tüm alt site(ler)ini de kapsar (rekürsif CTE ile hesaplanır).
* Kök site ataması, organizasyondaki tüm site'lara erişim sağlar.

#### Kısıtlar ve Bütünlük

* `(organizationUserId, siteId)` çifti tektir (yinelenen atamayı önler).
* Silme/güncelleme işlemlerinde ilişkiler otomatik temizlenir (cascade).
* Soft-delete edilmiş site'ler listeleme sorgularında filtrelenir.

#### Sık Yapılan İşlemler

* Davet sırasında başlangıç site atamaları
* Üyenin site listesini güncelleme (tam değiştirme)
* Çoklu kullanıcı için toplu site güncellemeleri (yerine koy / ekle / kaldır)

```typescript theme={null}
// tRPC (apps/azalt/src/server/api/routers/organization)
organizations.updateUserSites({ userId, assignedSiteIds })
organizations.bulkUpdateUserSites({ userIds, siteIds, operation: "replace" | "add" | "remove" })
```

#### Okuma Kalıpları

* Kullanıcı listeleri, her üye için `assignedSites` alanını döndürür (listeleme ve gösterim kolaylığı).
* Erişim kontrolleri, alt site'ler dahil edilerek hesaplanan `accessibleSiteIds` üzerinden yapılır.
* Kök site, arayüz listelerinde şeffaflık için çoğunlukla "Organization" olarak gösterilir.

#### Güvenlik

* Site atamalarını yalnızca Manager ve Owner güncelleyebilir.
* Tüm kontroller, işlemi yapan kullanıcının kendi erişebildiği site kapsamı ile sınırlandırılır.

#### İpuçları ve Köşe Durumlar

* Herhangi bir ataması olmayan kullanıcıların etkin site erişimi yoktur; ancak yönetim listelerinde görünebilirler.
* Toplu işlemlerde idempotent güncelleme için `replace`, artımlı değişiklik için `add`/`remove` tercih edin.

#### İlgili Kavramlar

* Organization User — üyelik ve rol
* Site — organizasyon içindeki hiyerarşik lokasyonlar
