# Mail Yetki Sistemi V2 - Design Spec

**Tarih:** 2026-03-16
**Kaynak:** 6 ajan takımının paralel analiz raporu

---

## Uygulanan Düzeltmeler

### KRİTİK Güvenlik (6 ajanın ortak tespiti)

| # | Sorun | Çözüm |
|---|-------|-------|
| 1 | XSS: `bypassSecurityTrustHtml()` | `sanitizer.sanitize(SecurityContext.HTML)` |
| 2 | Yetki bypass: `tumMailleriYukle()` fallback | Kaldırıldı → "Erişim yetkiniz yok" mesajı |
| 3 | `$ne: 'kisitli'` null/undefined geçirir | `erisimModu: 'herkes'` + `$exists: false` |
| 4 | Regex injection: `$regex: arama` | `escapeRegex()` eklendi |
| 5 | Cross-firma: `goUyeAra()` firmaId yok | `firmaId` filtresi eklendi (personel lookup ile) |
| 6 | Memory leak: `aramaTimeout` temizlenmiyor | `ngOnDestroy` eklendi |

### YÜKSEK Önem Bug Düzeltmeleri

| # | Sorun | Çözüm |
|---|-------|-------|
| 7 | `okundu` hiç güncellenmiyor | `mailSec()` içinde DB update |
| 8 | Detay kapatma butonu masaüstünde gizli | `display: flex` her zaman |
| 9 | Ek dosyalar tıklanamıyor | `ekIndir()` metodu + click handler |
| 10 | `snippet()` HTML tag gösteriyor | HTML strip regex |
| 11 | Race condition: personel arama | Sequence number pattern |
| 12 | Şifre validasyonu yok | Yeni hesapta zorunlu kontrol |
| 13 | Dark mode eksik elementler | Tamamlandı |
| 14 | Touch butonlar 36px | 48px'e yükseltildi |

### UX İyileştirmeleri

- Client-side mail arama (konu/gönderen)
- Hata durumu gösterimi (boş catch → hata mesajı)
- Socket.IO hesap seçim ekranında badge güncelleme
- Okundu optimistic UI update

---

## Mimari Kararlar

### Yetki Sorgusu (posta.component.ts)
```
$or: [
  { erisimModu: 'herkes' },           // açıkça herkes
  { erisimModu: { $exists: false } },  // eski kayıtlar (backward compat)
  { yetkiliPersoneller: personelId },   // personel bazlı
  { yetkiliDepartmanlar: departmanId }, // departman bazlı
  { yetkiliPersoneller: kullaniciId },  // platform user bazlı
]
```

### Hesap Bulunamadığında Davranış
- ESKİ: Tüm mailleri yetki kontrolsüz göster (güvenlik açığı)
- YENİ: "Erişim yetkiniz yok" mesajı göster

### XSS Koruması
- ESKİ: `bypassSecurityTrustHtml()` - Angular sanitizasyonunu bypass
- YENİ: `sanitize(SecurityContext.HTML)` - Angular'ın whitelist sanitizer'ı

---

## Gelecek Sprint Önerileri (Sunucu Tarafı Gerektiren)

1. **Ayrı yetki dokümanı**: `yetkiliPersoneller` flat array → `vt: "mail.yetki"` dokümanları
2. **Audit trail**: `vt: "mail.audit"` denetim kayıtları
3. **Geçici yetki**: `baslangic/bitis` tarihli erişim
4. **IMAP şifre şifreleme**: AES-256 at-rest encryption
5. **Backend yetki enforce**: Server-side authorization middleware
6. **Mail gönderme**: Reply/Forward/Compose SMTP entegrasyonu
7. **Per-user okundu**: `okunduBy: [{personelId, tarih}]` array
