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:
user.user_type.id === 1user.rolesiçindename === '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
| Domain | Add | Edit | Delete |
|---|---|---|---|
| Announcements | add-announcement | edit-announcement | delete-announcement |
| Events | add-announcement | edit-announcement | delete-announcement |
| Schools | add-school | edit-school | delete-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.
Related
- auth-akisi — useAuthStore ve kullanıcı tipi
- liste-sayfasi-pattern — GenericListPage’de permissions prop kullanımı