Proje: OkulUp · Hub: OkulUp — Decisions

Karar: İkili Permission Sistemi

Karar

Erişim kontrolü iki katmanlı:

  1. Frontend role map (default fallback)
  2. Backend PermissionMap override (gerçek kaynak)
canAccess(role, feature, context)
// Önce backend perm'e bakıyor, varsa onu kullanıyor
// Yoksa frontend rol tabanlı kontrole düşüyor

Why: Multi-tenant yapı — her okulun kullanıcıları farklı yetkilerle özelleştirilebiliyor. Sadece rol bazlı kontrol okul bazlı granüler konfigürasyonu desteklemez. Backend permission her login’de /api/me ile alınıyor, ayrıca /api/mobile-config ile de update ediliyor.

How to apply: Yeni feature eklerken:

  1. PermissionKey union’a yeni key ekle (permissions.ts)
  2. PERMISSIONS map’e rol tanımı ekle
  3. BACKEND_PERMISSION_MAP’e backend key eşlemesi ekle
  4. canSeeNavigationItem switch’e ekle (navigation için)
  5. BackendPermissionKey union’a backend perm key ekle (auth.types.ts)
  6. MobileConfigFeatures’a flag ekle (gerekiyorsa)

Alternatif Değerlendirilen

Sadece backend permission — internet olmadan çalışmaz, ilk yükleme sırasında undefined state sorunları çıkar.