Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Conventions

CRM Permission Sistemi

usePermission Hook (src/hooks/usePermission.ts)

const { hasPermission, hasAnyPermission, isSuperAdmin } = usePermission();

Super Admin Tespiti

İki koşuldan biri yeterli:

  1. user.user_type.id === 1
  2. user.roles içinde name === 'super-admin' olan rol

Super admin tüm hasPermission / hasAnyPermission kontrollerini otomatik olarak true döndürür.

Permission İsimleri Formatı

kebab-case — örnek: add-announcement, edit-school, delete-user

GenericListPage Permissions Prop

interface ActionPermissions {
    add?: string;    // permission adı
    edit?: string;
    delete?: string;
}
 
<GenericListPage permissions={{ add: 'add-school', edit: 'edit-school', delete: 'delete-school' }} />

Permission yoksa (undefined) → action her zaman görünür. Permission varsa → hasPermission(permission) kontrolü yapılır.

Bilinen Permission İsimleri

DomainAddEditDelete
Announcementsadd-announcementedit-announcementdelete-announcement
Eventsadd-announcementedit-announcementdelete-announcement
Schoolsadd-schooledit-schooldelete-school
Articles(araştırılmalı)(araştırılmalı)(araştırılmalı)

Önemli: Events modülü, announcement ile aynı permission’ları paylaşır (add-announcement, edit-announcement, delete-announcement).

Auth Store’dan Permission Listesi

user.permissions{ id, name, display_name, description, category_name }[] array’i.

Kontrol sırasında permissionNames = permissions.map(p => p.name) ile string array’e dönüştürülür.