Skip to main content

Identity & Access

Bu sayfa, Cınga backend içinde kullanıcı kimliği, rol modeli, cihaz bazlı authority yapısı ve izin katmanını detaylı biçimde açıklar. Amaç yalnız kullanıcı hesabı tutmak değil; hangi kullanıcının hangi cihaz üzerinde hangi aksiyonları yapabileceğini veri modeli üzerinden açık ve izlenebilir hale getirmektir.

Katmanın Temel Mantığı

Identity & Access modelinde üç ayrı seviye vardır:

  1. Kullanıcı kimliği
  2. Genel rol / profil
  3. Cihaz bazlı otorite ve aksiyon izinleri

Bu üçü aynı şey değildir ve aynı tabloda eritilmez.

1. users

users, sistemdeki gerçek kullanıcı kimliğinin ana tablosudur.

Neden vardır?

  • uygulamaya giriş yapan kişi burada tanımlanır
  • notlar, inbox, finans ve cihaz yetkileri kullanıcı kimliği etrafında döner
  • mobil uygulama oturumları kullanıcıyla ilişkilidir

Kolonlar

KolonTipNullAnlamı
idinthayırKullanıcı anahtarı
emailvarchar(100)evetE-posta ile giriş/iletişim
phone_numbervarchar(20)evetTelefon numarası
password_hashvarchar(255)evetParola hash’i
pin_hashvarchar(255)evetPIN hash’i
first_namevarchar(100)evetAd
last_namevarchar(100)evetSoyad
role_idintevetGenel rol
status_idintevetKullanıcı statüsü
address_idintevetAdres ilişkisi
last_login_timetimestampevetSon giriş zamanı
marketing_consentbooleanhayırPazarlama izni
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

Örnek kayıt

{
"id": 1,
"email": "gunce@example.com",
"phone_number": "905321112233",
"first_name": "Mehmet Günce",
"last_name": "Akkoyun",
"role_id": 1,
"status_id": 1,
"address_id": 2,
"last_login_time": "2026-04-03T09:30:00Z",
"marketing_consent": true
}

Ne içermez?

  • belirli bir cihaz üzerindeki yetki
  • cihaz başlat/durdur gibi aksiyon izinleri
  • mobil cihaz tokenları

2. user_roles

Bu tablo sistem içindeki genel rol sözlüğünü taşır.

Neden vardır?

Kullanıcı rolü tekrar eden bir sözlüktür. Rol bilgisini her kullanıcı satırında serbest string olarak taşımak yerine normalize biçimde referans vermek daha doğrudur.

Kolonlar

KolonTipNullAnlamı
idinthayırRol anahtarı
namevarchar(100)hayırRol kodu/adı
descriptionvarchar(255)evetAçıklama

Örnek roller

  • admin
  • supervisor
  • technician
  • dealer
  • farmer
  • farmer_employee

Tasarım notu

user_roles, kullanıcının sistem içindeki genel profilini tanımlar; cihaz bazlı erişim sınırını tek başına belirlemez.

3. authorities

authorities, bir kullanıcının belirli bir cihaz üzerindeki temel otoritesini temsil eder.

Neden vardır?

Global rol tek başına yeterli değildir. Aynı rolü taşıyan iki kullanıcı farklı cihazlarda farklı erişim seviyesine sahip olabilir. Bu nedenle kullanıcı ile cihaz arasındaki ilişki ayrı bir tabloyla modellenir.

Kolonlar

KolonTipNullAnlamı
idinthayırAuthority anahtarı
device_idvarchar(21)hayırYetkinin geçerli olduğu cihaz
user_idinthayırYetki sahibi kullanıcı
ownerbooleanhayırCihazın sahibi/ana sorumlusu mu
is_activebooleanhayırYetki aktif mi
assigned_byintevetYetkiyi veren kullanıcı
updated_byintevetSon düzenleyen
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

Örnek kayıt

{
"id": 2,
"device_id": "46000000C47CA670",
"user_id": 2,
"owner": false,
"is_active": true,
"assigned_by": 1,
"updated_by": 1
}

Ne içermez?

  • aksiyon bazlı detay izinler
  • kullanıcı rolü bilgisi
  • cihazın metadata’sı

4. permissions

Bu tablo aksiyon seviyesindeki izin sözlüğünü taşır.

Neden vardır?

Bir authority kaydı yalnız “bu kullanıcı cihazla ilişkili” demekle kalmaz; ayrıca neler yapabileceği de bilinmelidir. İzinlerin kod tabanında dağılmaması için bunlar sözlük olarak tutulur.

Kolonlar

KolonTipNullAnlamı
idinthayırİzin anahtarı
codevarchar(100)hayırTeknik izin kodu
namevarchar(150)hayırİnsan okunur ad
descriptionvarchar(255)evetAçıklama
is_activebooleanhayırAktiflik
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

Örnek izinler

  • pump.start
  • pump.stop
  • notes.view
  • notes.add
  • finances.view
  • reports.view
  • device.settings.change

5. authority_permissions

Bu tablo bir authority kaydına hangi izinlerin bağlandığını taşır.

Neden vardır?

Kullanıcının cihaz üzerindeki yetkisi tek tip olmayabilir. Bazı kullanıcı yalnız rapor görüntüler, bazıları not ekler, bazıları pompa başlatır. Bu nedenle authority ile permission arasında ayrı ilişki gerekir.

Kolonlar

KolonTipNullAnlamı
idinthayırİlişki anahtarı
authority_idinthayırAuthority kaydı
permission_idinthayırVerilen izin
is_activebooleanhayırİzin aktif mi
granted_byintevetİzni veren kullanıcı
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

Örnek kayıt

{
"id": 5,
"authority_id": 3,
"permission_id": 1,
"is_active": true,
"granted_by": 1
}

6. mobile_devices

Bu tablo kullanıcıya ait mobil kurulumları ve push token ilişkisini taşır.

Neden vardır?

Bir kullanıcının birden fazla telefonu olabilir. Push token, cihaz platformu ve uygulama sürümü kullanıcı tablosunda tutulursa hem tekrar oluşur hem de çok cihazlı senaryo bozulur.

Kolonlar

KolonTipNullAnlamı
idinthayırMobil cihaz anahtarı
user_idinthayırSahibi olan kullanıcı
device_identifiervarchar(255)hayırUygulama kurulum kimliği
push_tokenvarchar(255)hayırPush token
platformenumhayırios / android
manufacturervarchar(50)evetÜretici
modelvarchar(50)evetModel
os_versionvarchar(50)evetOS sürümü
app_versionvarchar(50)evetUygulama sürümü
is_activebooleanhayırKurulum aktif mi
last_login_timetimestampevetSon giriş
last_seen_timetimestampevetSon görülme
create_timetimestamphayırOluşturma
update_timetimestamphayırGüncelleme

Örnek kayıt

{
"id": 1,
"user_id": 1,
"device_identifier": "ios-installation-001",
"push_token": "expo_token_user1_ios",
"platform": "ios",
"manufacturer": "Apple",
"model": "iPhone 14",
"os_version": "17.4",
"app_version": "1.0.3",
"is_active": true,
"last_seen_time": "2026-04-03T10:30:00Z"
}

Kimlik ve Yetki Katmanının Temel Kararları

Global rol ile cihaz yetkisi farklıdır

  • users.role_id → kullanıcının genel sistem profili
  • authorities → kullanıcı ile cihaz arasındaki ilişki
  • authority_permissions → bu ilişki üzerindeki aksiyon sınırı

Kullanıcı ile mobil cihaz farklı şeydir

Push ve mobil oturum takibi kullanıcı tablosuna gömülmez; mobile_devices tablosu ayrı tutulur.

Yetki cihaz bazlıdır

Bu model şu an cihaz merkezli yetki kurgusunu benimser. İleride grup/proje bazlı authorization katmanı eklenebilir; fakat mevcut sözleşmede authority ana ekseni cihazdır.

Sonuç

Identity & Access veri modeli, Cınga backend’te kullanıcıyı yalnız bir hesap kaydı olarak değil; genel rol, cihaz ilişkisi, aksiyon izni ve mobil kurulumları ile birlikte tanımlar. Böylece sistem hem kullanıcıyı tanır hem de aynı kullanıcının farklı cihazlarda farklı yetki seviyeleriyle çalışabilmesini veri modeli üzerinden yönetebilir.