RBAC Sistemi
Rol Tabanlı Erişim Kontrolü (Role-Based Access Control) sistemi detayları.
Genel Bakış
RBAC sistemi, kullanıcıların yetkilerini rollere ve permission'lara göre yönetir. Sistem, hiyerarşik bir yapı kullanarak güvenliği sağlar.
Rol Hiyerarşisi
Roller, priority değerine göre sıralanır. Düşük priority değeri = Yüksek yetki mantığı ile çalışır.
Sistem Rolleri
| Rol | Priority | Açıklama | Gizli Anahtar |
|---|---|---|---|
system.toor | 1 | Sistem seviyesinde erişim | Evet (X-Role-Secret header) |
server.root | 2 | Sunucu seviyesinde erişim | Evet (X-Role-Secret header) |
Yönetim Rolleri
| Rol | Priority | Açıklama |
|---|---|---|
mgmt.superadmin | 10 | Tam yetkili erişim |
mgmt.admin | 20 | Yönetici seviyesinde erişim |
mgmt.moderator | 30 | Moderasyon seviyesinde erişim |
mgmt.editor | 40 | Editör seviyesinde erişim |
mgmt.user | 50 | Kullanıcı seviyesinde erişim |
mgmt.anonymous | 60 | Anonim seviyede erişim |
Permission Sistemi
Permission Tanımlama
Permission'lar controller'larda getPermissions() metodu ile tanımlanır:
public static function getPermissions(): array
{
return [
['slug' => 'users.manage', 'name' => 'Kullanıcı Yönetimi - Tam Yetki'],
['slug' => 'users.view', 'name' => 'Kullanıcı Görüntüleme'],
['slug' => 'users.view.own', 'name' => 'Kendi Profilini Görüntüleme'],
// ...
];
}
Rol-Permission Atamaları
Rol-permission atamaları controller'larda getDefaultRolePermissions() metodu ile tanımlanır:
public static function getDefaultRolePermissions(): array
{
return [
'mgmt.superadmin' => [
'users.manage', 'users.view', 'users.view.own',
// ...
],
'mgmt.admin' => [
'users.view', 'users.view.own',
// ...
],
];
}
Permission Pattern'leri
| Pattern | Açıklama | Örnek |
|---|---|---|
{module}.manage | Modül tam yetki | users.manage |
{module}.view | Modül görüntüleme | users.view |
{module}.view.own | Kendi kaynaklarını görüntüleme | users.view.own |
{module}.create | Modül oluşturma | users.create |
{module}.create.own | Kendi kaynaklarını oluşturma | users.create.own |
{module}.update | Modül güncelleme | users.update |
{module}.update.own | Kendi kaynaklarını güncelleme | users.update.own |
{module}.delete | Modül silme | users.delete |
{module}.delete.own | Kendi kaynaklarını silme | users.delete.own |
{module}.restore | Modül geri yükleme | users.restore |
{module}.restore.own | Kendi kaynaklarını geri yükleme | users.restore.own |
Hiyerarşi Kontrolü
Rol Hiyerarşisi
Kullanıcılar sadece kendi seviyelerinden düşük seviyeli rolleri yönetebilir:
- Kullanıcı
priority: 20rolüne sahipse, sadecepriority > 20rolleri oluşturabilir/güncelleyebilir/silebilir - Sistem rolleri (
system.toor,server.root) için gizli anahtar gereklidir
Permission Hiyerarşisi
Permission'lar da priority değerine göre sıralanır:
| Permission Pattern | Priority | Açıklama |
|---|---|---|
admin.manage | 10 | En yüksek yetki |
admin.* | 20 | Admin seviyesi |
*.manage | 30 | Modül yönetimi |
*.* | 40 | Standart permission'lar |
*.own | 50 | Kendi kaynak permission'ları |
Sistem Rolleri
Özellikler
- Tüm permission kontrollerini otomatik bypass eder
- Tüm permission'lar otomatik atanır (RoleSeeder'da)
- Gizli anahtar ile korunur (
ROLE_SYSTEM_SECRET)
Gizli Anahtar Kullanımı
Sistem rolleri için gizli anahtar gereklidir:
Ortam Değişkeni:
ROLE_SYSTEM_SECRET=your-secret-key
Header:
X-Role-Secret: your-secret-key
Body (Opsiyonel):
{
"secret": "your-secret-key"
}
Kullanıcı Permission'ları
Permission Kaynakları
Kullanıcılar permission'ları iki kaynaktan alabilir:
- Role'lerden: Kullanıcının rolleri üzerinden gelen permission'lar
- Kullanıcıya Özel: Kullanıcıya doğrudan atanmış permission'lar
Permission Kontrolü
Permission kontrolü şu sırayla yapılır:
- Sistem rolü kontrolü (varsa bypass)
- Kullanıcıya özel reddedilmiş permission kontrolü
- Kullanıcıya özel verilmiş permission kontrolü
- Role'lerden gelen permission kontrolü
.own Permission'ları
.own uzantılı permission'lar, kullanıcının sadece kendi kaynaklarını yönetmesine izin verir:
users.view.own: Sadece kendi profilini görüntülemeusers.update.own: Sadece kendi profilini güncellemeusers.delete.own: Sadece kendi hesabını silme
API Endpoint'leri
Roller
GET /api/v1/roles- Rol listesiPOST /api/v1/roles- Rol oluşturGET /api/v1/roles/{id}- Rol detayıPUT/PATCH /api/v1/roles/{id}- Rol güncelleDELETE /api/v1/roles/{id}- Rol silPOST /api/v1/roles/{id}/restore- Rol geri yükle
Permission'lar
GET /api/v1/permissions- Permission listesiPOST /api/v1/permissions- Permission oluşturGET /api/v1/permissions/{id}- Permission detayıPUT/PATCH /api/v1/permissions/{id}- Permission güncelleDELETE /api/v1/permissions/{id}- Permission silPOST /api/v1/permissions/{id}/restore- Permission geri yükle
Rol-Permission İlişkileri
POST /api/v1/roles/assign-permission- Role permission ataPOST /api/v1/roles/remove-permission- Role permission kaldır
Kullanıcı-Rol İlişkileri
POST /api/v1/users/assign-role- Kullanıcıya rol ataPOST /api/v1/users/remove-role- Kullanıcıdan rol kaldır
Kullanıcı Permission'ları
GET /api/v1/users/{user}/permissions- Kullanıcı permission listesiPOST /api/v1/users/{user}/permissions- Kullanıcıya permission ataPUT/PATCH /api/v1/users/{user}/permissions/{permission?}- Kullanıcı permission güncelleDELETE /api/v1/users/{user}/permissions/{permission?}- Kullanıcıdan permission kaldır
Detaylı bilgi için RBAC API Referansı sayfasına bakın.
İlgili Dokümantasyon
- Permission Kılavuzu - Permission kullanımı
- RBAC API Referansı - API endpoint'leri