> ## 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

> Bir User'ın belirli bir organizasyondaki üyeliği: rol, durum ve site erişimi.

### Organization User

Organization User, bir kullanıcının belirli bir organizasyondaki üyeliğini temsil eder. Bu kayıt org düzeyi rol (RBAC), üyelik durumu ve site atamalarını içerir.

```typescript theme={null}
// apps/azalt/src/server/db/types/organization.ts (özet)
interface OrganizationUser {
  id: string;
  organizationId: string;
  userId: string;
  role: "VIEWER" | "COLLECTOR" | "APPROVER" | "MANAGER" | "OWNER";
  status: "ACTIVE" | "INVITED" | "INACTIVE";
  invitationToken?: string | null;
  invitationExpiresAt?: Date | null;
  tags?: string[] | null;
  createdAt: Date;
  updatedAt: Date;
}
```

#### Kısaca

* (organizationId, userId) çifti başına tek üyelik
* Rol (RBAC) yetkileri belirler; site atamaları kapsamı sınırlar
* Durum yaşam döngüsü: `INVITED → ACTIVE → INACTIVE`
* `tags` alanı hafif sınıflandırma/filtreleme için

#### Roller (RBAC)

* Viewer: atandığı site(ler)i yalnızca görüntüler
* Collector: atandığı site(ler)de veri girip düzenleyebilir
* Approver: atandığı site(ler)de gönderimleri onaylayabilir
* Manager: atandığı site kapsamı içinde kullanıcı/site/form yönetimi
* Owner: organizasyonun tam yönetimi

#### Üyelik Durumu

* INVITED (varsayılan): davet oluşturuldu; kabul edilene kadar sınırlı
* ACTIVE: aktif üyelik; rol ve kapsam geçerli
* INACTIVE: devre dışı; erişim yok

Davetler e-posta ile ve süre sınırlıdır. Kabul ile üyelik ACTIVE olur; kullanıcıda `currentOrganizationId` boşsa bu org atanabilir.

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

* Her organizasyon için tek üyelik: `(organizationId, userId)`
* Üyelik silindiğinde site atamaları (OrganizationUserSite) FK ile birlikte temizlenir (cascade)
* Yetki kuralları gereği sahiplik/rol değişikliklerinde korumalar uygulanır

#### Site Erişimi (ABAC)

Site erişimi, Organization User Site bağlantıları ile atanır. Etkin erişim, doğrudan atanan site(ler)in tüm alt site(ler)ini de kapsar (rekürsif sorgu ile). Kök site atanırsa tüm organizasyona erişim verilmiş olur.

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

* Organizasyon kullanıcılarını listeleme (çağıranın site erişimiyle filtrelenir)
* Rol ve site atamaları ile kullanıcı davet etme
* Bir kullanıcının rolünü ve/veya site atamalarını güncelleme
* Çoklu kullanıcı için site atamalarını toplu güncelleme (yerine koy/ekle/kaldır)

```typescript theme={null}
// tRPC (apps/azalt/src/server/api/routers/organization)
organizations.listUsers(): Array<{
  id, name, email, phone, image, status, role,
  createdAt, ownerId, assignedSites: { id, name }[]
}>

organizations.inviteUser({ email, role, assignedSiteIds })
organizations.updateUserRole({ userId, role, assignedSiteIds? })
organizations.updateUserSites({ userId, assignedSiteIds })
organizations.bulkUpdateUserRoles({ userIds, role })
organizations.bulkUpdateUserSites({ userIds, siteIds, operation: "replace" | "add" | "remove" })
```

#### Güvenlik ve Filtreleme

* Okumalar kısıtlıdır: viewer/collector, kendi erişebildiği site ağacındaki kullanıcıları görür; manager/owner tüm üyeleri görür.
* Yazma işlemleri yalnızca manager/owner tarafından ve kendi erişim kapsamındaki site'lar için yapılabilir.
* Row Level Security (RLS) ve yardımcı korumalar bağlam güvenliğini sağlar.

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

* Site ataması olmayan kullanıcılar listelerde görünebilir (manager/owner için); etkin erişimleri boştur.
* Kök siteye atamak tüm organizasyona erişim verir (kök + alt site'ler).
* Toplu işlemlerde `replace` idempotent güncellemeler için önerilir; `add`/`remove` artımlı değişim içindir.

#### İlgili Kavramlar

* User — küresel kimlik ve profil
* Organization User Site — üyelik için site düzeyi erişim
