📱 Device Limit Hierarchy

FINAL

User → Plan → Setting (3 Katmanlı Sistem)

📅 2025-12-05 🎯 users.device_limit Zaten Var! ✅ Fallback Stratejisi

🎯 3 Katmanlı Hiyerarşi

1

users.device_limit

Kullanıcıya özel cihaz limiti (EN ÖNCELİKLİ)

📋 Ne Zaman Kullanılır?

  • ✅ VIP kullanıcıya özel limit vermek
  • ✅ Problematic kullanıcıyı kısıtlamak (1 cihaz)
  • ✅ Test kullanıcısı sınırsız (999)
  • ✅ Özel anlaşmalar (kurumsal)

🔐 Teknik

// Önce user'a bak
if ($user->device_limit !== null) {
  return $user->device_limit;
}

✅ Default Değer:

NULL → Yani normalde boş, özel durumda set edilir

💡 Örnek Senaryolar:

  • • VIP üye: device_limit = 5
  • • Problematic: device_limit = 1
  • • Test user: device_limit = 999
  • • Normal user: device_limit = NULL → Plan'a bak
2

subscription_plans.device_limit

Plan bazlı cihaz limiti (ORTA ÖNCELİK)

📋 Ne Zaman Kullanılır?

  • Trial Plan: 1 cihaz
  • Basic Plan: 2 cihaz
  • Premium Plan: 3 cihaz
  • Family Plan: 5 cihaz

🔐 Teknik

// User'da yoksa plan'a bak
if ($user->activeSubscription) {
  $plan = $user->activeSubscription->plan;
  if ($plan->device_limit) {
    return $plan->device_limit;
  }
}

💡 Örnek Plan Yapısı:

Trial Plan: device_limit = 1
Basic Plan: device_limit = 2
Premium Plan: device_limit = 3
Family Plan: device_limit = 5
3

auth_device_limit (Setting)

Global fallback (EN SON ÖNCELİK)

📋 Ne Zaman Kullanılır?

  • ✅ User'da NULL
  • ✅ Plan'da NULL veya subscription yok
  • Son çare fallback
  • ✅ Tenant bazında global ayar

🔐 Teknik

// Son olarak setting'e bak
return setting('auth_device_limit', 1);

💡 Default:

Muzibu için: 1 cihaz (güvenli başlangıç)

🔄 Fallback Akışı

1️⃣ user.device_limit
NULL değil mi? → KULLAN!
2️⃣ plan.device_limit
User NULL ise plan'a bak → KULLAN!
3️⃣ auth_device_limit
İkisi de NULL ise setting → KULLAN!

💡 Kod İmplementasyonu:

public function getDeviceLimit(User $user): int
{
  // 1. User override
  if ($user->device_limit !== null) {
    return $user->device_limit;
  }

  // 2. Plan default
  $subscription = $user->activeSubscription();
  if ($subscription && $subscription->plan->device_limit) {
    return $subscription->plan->device_limit;
  }

  // 3. Global fallback
  return setting('auth_device_limit', 1);
}

🎯 Örnek Senaryolar

Senaryo 1: Normal Kullanıcı

user.device_limit

NULL

plan.device_limit

3

SONUÇ

3 cihaz ✅

Senaryo 2: VIP Kullanıcı

user.device_limit

5 (VIP)

plan.device_limit

3 (ignored)

SONUÇ

5 cihaz ✅

Senaryo 3: Aboneliği Olmayan

user.device_limit

NULL

plan.device_limit

NULL (no sub)

SONUÇ

1 cihaz (setting) ✅

Senaryo 4: Problematic Kullanıcı

user.device_limit

1 (BANNED)

plan.device_limit

5 (ignored)

SONUÇ

1 cihaz (kısıtlı) ✅

📊 Özet

1️⃣ User Level

  • Field: users.device_limit
  • Default: NULL
  • Use: Özel durumlar
  • Örnek: VIP, Test, Ban

2️⃣ Plan Level

  • Field: plans.device_limit
  • Default: Plan'a göre
  • Use: Normal akış
  • Örnek: Trial=1, Premium=3

3️⃣ Setting Level

  • Key: auth_device_limit
  • Default: 1
  • Use: Fallback
  • Örnek: Abonelik yok

💡 Altın Kural:

User → Plan → Setting sırasıyla kontrol et, ilk bulduğunu kullan!