Proje: OkulUp API · Hub: OkulUp API — Decisions
AuthorizationService — Merkezi Yetki Yaklaşımı
Karar
Tüm yetki kontrolleri (canAccessStudent, canAccessClass, validateStudentFilter vb.) tek bir servis sınıfında (AuthorizationService) toplanmıştır. Laravel Policy’leri kullanılmaz (Assignment Policy hariç — Laravel gate entegrasyonu için kısmi kullanım).
Neden
- Multi-rol ve çok katmanlı veri izolasyonu (okul + sınıf + öğrenci) Laravel Policy’ye sığmıyor
getAccessibleStudentIds()gibi toplu scope metodları Policy’de doğal değil- Yetkisiz erişim loglama (
logUnauthorizedAccess) merkezi olunca tutarlı - Controller’lar
$authService->canAccessStudent(...)ile aynı mantığı tekrar etmiyor
Alternatifler
- Laravel Policy: Her model için policy ayrı — sınıflar arası paylaşım zor
- Inline controller logic: Tekrar kodu artırır, tutarsızlık riski
Nasıl Uygulanıyor
// DI ile inject:
public function __construct(
private AuthorizationService $authService,
) {}
// Kullanım:
if (!$this->authService->canAccessStudent($user, $student->id)) {
$this->authService->logUnauthorizedAccess($user, 'student', $student->id, 'academic_summary');
return response()->json(['message' => '...'], 403);
}Related
- rol-ve-yetki-mimarisi — metodların detayı
- api-kod-konvansiyonlari — servis kullanım pattern’i