🎯 Muzibu Device System
Final Implementation Plan | 26 Kasım 2025
✅ KARAR:
• Device limit: 1 (varsayılan) - İleride multi-device abonelik eklenebilir
• Login sırasında modal göster: Aktif cihazları listele + Kullanıcı seçsin
• Session kesilince müzik otomatik durur
• Polling YOK! Sadece login kontrolü
📱 Senaryo 1: Login Sırasında Kontrol
1. Kullanıcı login yapmaya çalışıyor
↓
2. Backend: Active session count kontrol eder
↓
3. Eğer count >= device_limit:
↓
→ Modal göster: "Aktif cihazlar"
→ Kullanıcı seçer: Hangi cihazı kapatacak?
→ Backend: O session'ı sil
↓
4. Yeni session oluştur → Login başarılı
Login Modal Mockup:
Login Screen
Cihaz Limitine Ulaştınız
Giriş yapabilmek için bir cihazdan çıkış yapmanız gerekiyor.
💻 Windows - Chrome
IP: 192.168.1.45
Son Erişim: 2 saat önce
Bu Cihazdan Çıkış Yap
📱 Android - Chrome Mobile
IP: 192.168.1.78
Son Erişim: 5 dakika önce
Bu Cihazdan Çıkış Yap
Tüm Cihazlardan Çıkış Yap
🔔 Senaryo 2: Çıkış Yapılan Cihazda Ne Olur?
1. Cihaz A'da müzik çalıyor (09:00 - akşama kadar)
↓
2. Kullanıcı Cihaz B'den login yaptı
↓
3. Cihaz A'nın session'ı silindi
↓
4. Cihaz A: Arka planda session check yapıyor (her 30 saniye)
↓
5. Session yok → Müzik durdur
↓
6. Modal göster: "Başka cihazdan giriş yapıldı"
Çıkış Modal Mockup:
Player Screen
⚠️ Oturumunuz Sonlandırıldı
Başka bir cihazdan giriş yapıldığı için bu cihazdaki oturumunuz sonlandırıldı.
Müzik otomatik olarak durduruldu.
Tamam
📂 Oluşturulacak Dosyalar
app/Services/Tenant1001/DeviceService.php
- getActiveDevices(User $user)
- getActiveDeviceCount(User $user)
- checkDeviceLimit(User $user)
- terminateSession(string $sessionId)
- terminateAllSessions(User $user)
- getDeviceInfo(string $userAgent, string $ip)
app/Http/Controllers/Auth/LoginController.php
- Login öncesi device limit kontrol et
- Eğer limit aşıldıysa → Aktif cihazları döndür
- Frontend modal gösterir
routes/api.php (Tenant 1001)
- POST /api/devices/check → Limit kontrol
- GET /api/devices/active → Aktif cihazlar
- DELETE /api/devices/{sessionId} → Session sil
- DELETE /api/devices/all → Tüm session'ları sil
resources/views/themes/muzibu/components/device-limit-modal.blade.php
- Aktif cihazları listele (IP, User Agent, Last Activity)
- "Bu Cihazdan Çıkış Yap" butonları
- "Tüm Cihazlardan Çıkış Yap" butonu
resources/views/themes/muzibu/components/session-check.blade.php
- Arka planda session kontrol (her 30 saniye)
- Session yoksa → Müziği durdur
- Modal göster: "Başka cihazdan giriş yapıldı"
resources/views/themes/muzibu/components/session-terminated-modal.blade.php
- Oturum sonlandırma mesajı
- "Tamam" butonu → Logout
⚙️ Teknik Detaylar
Session Check (Arka Plan):
setInterval(() => {
fetch('/api/session/check')
.then(response => {
if (response.status === 401) {
// Session yok
stopMusic();
showSessionTerminatedModal();
}
});
}, 30000); // Her 30 saniye
Device Limit Kontrol:
// Tenant1001Service
public function checkDeviceLimit(User $user): bool
{
// Sadece Tenant 1001 için
if (tenant()->id !== 1001) {
return true;
}
$limit = $user->device_limit ?? 1;
$activeCount = $this->getActiveDeviceCount($user);
return $activeCount < $limit;
}
Session Silme:
// Session silme
DB::table('sessions')
->where('id', $sessionId)
->delete();
// Kullanıcı bir sonraki istekte 401 alır
// Frontend logout yapar
🚀 Sonraki Adımlar
Sıralama:
- Tenant1001Service oluştur (Backend logic)
- API endpoint'leri ekle (Device management)
- Login controller güncelle (Device limit kontrol)
- Login modal component (Aktif cihazlar)
- Session check component (Arka plan kontrol)
- Çıkış modal component (Oturum sonlandı)
- Test (2 cihazdan giriş dene)
✅ ONAY: Bu plan uygun mu? Başlayalım mı?