Proje: OkulUp API · Hub: OkulUp API — Domain

OkulUp API — Rol ve Yetki Mimarisi

5 Rol

RolTürkçeSchool-Scoped?Açıklama
adminSistem YöneticisiHayırTüm okullara erişir
managerOkul MüdürüEvetKendi okulunu yönetir
teacherÖğretmenEvetKendi sınıflarını yönetir
parentVeliEvetÇocuklarının verilerine erişir
studentÖğrenciEvetKendi verilerine erişir

AuthorizationService — Merkezi Yetki

app/Services/AuthorizationService.php tüm yetki kontrolleri için tek nokta.

Temel Metodlar

canManageUser(User $actor, User $target): bool
canAssignUserRole(User $actor, int $roleId): bool
canAssignUserSchool(User $actor, ?int $schoolId): bool
canAccessStudent(User $user, int $studentId): bool  // çok kullanılan
canAccessClass(User $user, int $classId): bool
validateStudentFilter(User $user, ?int $studentId, string $context): ?int
validateClassFilter(User $user, ?int $classId, string $context): ?int
getAccessibleStudentIds(User $user): ?Collection   // null = admin = tümü
getAccessibleClassIds(User $user): ?Collection
getPermissions(User $user): array<string, bool>    // /me ve /mobile/config
logUnauthorizedAccess(User $user, ...): void       // AuditLog + Log::warning

canAccessStudent Kuralları

RolKural
adminHer zaman true
managerAynı school_id
teacherKendi sınıflarındaki öğrenciler
studentSadece kendi ID’si
parentchildren() pivot tablosundaki öğrenciler

Kullanıcı Yönetimi Hiyerarşisi

  • admin → tüm rolleri oluşturabilir (admin dahil)
  • manager → teacher, parent, student oluşturabilir (kendi okulu)
  • teacher, parent, student → kimseyi yönetemez

Yetki İhlali Loglama

Yetkisiz erişim hem Log::warning hem de audit_logs tablosuna yazılır. Context string ile hangi endpoint’ten geldiği de kaydedilir.

permissions Map — /me endpoint

getPermissions() metodunun döndürdüğü ~30 adet true/false flag, mobil uygulamanın hangi UI elementlerini göstereceğini belirler.
Örnek: dashboard_teacher, assignments_submit, payments_create vb.