Web Uygulamalarında Rol Tabanlı Yetkilendirme (RBAC) Mimarisi
Web Uygulamalarında Rol Tabanlı Yetkilendirme (RBAC) Mimarisi
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
{ "title": "Modern Web Uygulamalarında Rol Tabanlı Yetkilendirme (RBAC) Mimarisi Rehberi", "slug": "web-uygulamalarinda-rbac-rol-tabanli-yetkilendirme-mimarisi-rehberi", "summary": "Modern web sistemlerinde güvenli, ölçeklenebilir Rol Tabanlı Yetkilendirme (RBAC) mimarisi kurulum adımları. Dijital ajans ve kurumsal projeler için eksiksiz uygulama rehberi.", "content": "
Modern Web Geliştirmede RBAC Mimarisi
Rol Tabanlı Erişim Kontrolü (RBAC), kullanıcı erişim haklarını roller üzerinden yöneten güvenlik modelidir. Doğrudan kullanıcıya yetki vermek yerine yetkiler rollere, roller kullanıcılara atanır. Kod karmaşasını engeller, güvenliği artırır.
Adım 1: Veritabanı Şemasını Tasarlama
RBAC için standart 5 tablolu ilişkisel yapı gerekir. Kullanıcılar, Roller ve İzinler çoktan-çoğa (N:M) bağlanır.
- users: Kimlik bilgileri (id, email, password_hash).
- roles: Rol tanımları (id, name, slug). Örnek: admin, editor, viewer.
- permissions: Atomik yetkiler (id, slug, description). Örnek: post:create, post:delete, user:read.
- user_roles: Hangi kullanıcı hangi rolde (user_id, role_id).
- role_permissions: Hangi rolde hangi izinler var (role_id, permission_id).
Kritik kural: İzinleri roller üzerinden bağlayın. Kullanıcıya direkt izin atamayın; bakım zorlaşır.
Adım 2: Middleware ile Yetki Denetimi Katmanı Kurma
İstek geldiğinde kullanıcının kimliğini doğrulayın, rollerini ve izinlerini çekin, route izniyle karşılaştırın.
Uygulama Mantığı (Node.js/Express Örneği)
function checkPermission(requiredPermission) {
return (req, res, next) => {
const userPermissions = req.user.permissions || [];
if (!userPermissions.includes(requiredPermission)) {
return res.status(403).json({ error: 'Erişim reddedildi' });
}
next();
};
}
// Route kullanımı
app.delete('/api/posts/:id', authenticateToken, checkPermission('post:delete'), deletePostHandler);
Adım 3: JWT ve Token İçi Yetki Yönetimi
Her istekte veritabanına yetki sorgusu atmak performansı düşürür. İzin slug listesini JWT payload içine ekleyin veya Redis üzerinde cache tutun.
- JWT Payload Yaklaşımı: Hızlıdır. Ancak rol güncellendiğinde token süresi bitene kadar yetki değişmez. Token süresini kısa tutun (15 dakika).
- Redis Cache Yaklaşımı: Rol/izin değiştiğinde cache temizlenir (invalidation). Gerçek zamanlı güvenlik sağlar.
Adım 4: Dijital Ajans ve SaaS Trendleri: Hibrit RBAC + ABAC
Modern web projelerinde salt RBAC yetersiz kalabilir. Kullanıcı 'editor' rolündedir ancak sadece kendi oluşturduğu içeriği silmelidir. Bu senaryoda Nitelik Tabanlı Erişim Kontrolü (ABAC) ile zenginleştirin:
- Rol Kontrolü: Kullanıcı `post:edit` yetkisine sahip mi?
- Sahiplik Kontrolü: `post.author_id === current_user.id` mi?
Güvenlik İpuçları
- Varsayılan Engel (Default Deny): İzin açıkça tanımlanmamışsa erişimi engelleyin.
- Frontend İllüzyonu: Butonları gizlemek güvenlik değildir. API seviyesinde her endpoint'i doğrulayın.
- Süper Admin Güvenliği: Kritik işlemlerde (wildcard `*` yetkisi) çok faktörlü doğrulama (MFA) şart koşun.