Ana içeriğe atla

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.
// 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)
// 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