Bedrud Belgeler

Bedrud, erişim kontrolü için 5 kademeli bir rol sistemi uygular. Her rol, kullanıcı kaydında saklanan ve hem API katmanında (backend middleware) hem de UI katmanında (frontend korumaları ve koşullu işleme) uygulanan bir dizi erişim dizesine eşlenir.

Rol Hiyerarşisi

RolErişim DizisiBackend AğırlığıAçıklama
Süper Admin['superadmin', 'user']4Tam sistem erişimi, tüm yönetici yetenekleri
Admin['admin', 'user']3Tam yönetici erişimi, süper admin ile aynı
Moderatör['moderator', 'user']2Salt okunur yönetici görünümü, değişiklik yok
Kullanıcı['user']1Standart kayıtlı kullanıcı
Misafir['guest']0Kayıtsız katılımcı, yalnızca katılma

Backend Uygulaması

Erişim seviyeleri, her admin rotasında RequireAccess middleware’i aracılığıyla uygulanır. Middleware, kullanıcının erişim dizisini gereken minimum seviyeye karşı kontrol eder:

  • superadmin erişimi gerektiren rotalar admin, moderatör, kullanıcı ve misafiri reddeder
  • admin erişimi gerektiren rotalar süper admin ve admine izin verir
  • moderator erişimi gerektiren rotalar süper admin, admin ve moderatöre izin verir

Backend, erişimleri veritabanında virgülle ayrılmış bir dize olarak saklar (users tablosundaki accesses sütunu). StringArray GORM türü, serileştirme ve seri durumdan çıkarmayı yönetir.

Frontend Entegrasyonu

Kullanıcı Türü

user.store.ts dosyasındaki User arayüzü, erişim dizisinden türetilen iki boolean alan içerir:

interface User {
  // ...
  isSuperAdmin: boolean  // accesses.includes('superadmin')
  isAdmin: boolean       // accesses.includes('admin') || accesses.includes('superadmin')
  accesses: string[]     // raw access list from backend
}

Admin Koruması

Admin düzeni (/dashboard/admin), süper admin, admin ve moderatörün geçmesine izin verir. Moderatörler bir isReadOnly=true bağlam değişkeni alır:

// routes/dashboard/admin.tsx
const canAccess = user?.isSuperAdmin || accesses.includes('admin') || accesses.includes('moderator')

useAdminContext() hook’u, isReadOnly bayrağını tüm alt rotalara sağlar:

const { isReadOnly } = useAdminContext()

Moderatörlerin Görebildikleri vs Yapabildikleri

SayfaGörüntüleDeğiştir
Genel bakış istatistikleri✅ Tam istatistiklerN/A
Kullanıcı listesi✅ Tam liste❌ Toplu işlem yok
Kullanıcı detayı✅ Tam profil❌ Durum/rol/silme/çıkış yok
Oda listesi✅ Tam liste❌ Askıya alma/silme/düzenleme sınırı yok
Oda detayı✅ Tam bilgi❌ Askıya alma/silme/atma/susturma yok
Ayarlar❌ Yönlendirildi

Rol Seçici

Admin arayüzü, önceki ikili süper admin anahtarını değiştirerek hem kullanıcı listesi tablosunda hem de kullanıcı detay sayfasında bir <Select> açılır menüsü sağlar. Mevcut seçenekler:

SeçenekKaydeder
Süper Admin['superadmin', 'user']
Admin['admin', 'user']
Moderatör['moderator', 'user']
Kullanıcı['user']
Misafir['guest']

Açılır menü, tam erişim dizisiyle birlikte bir PUT /api/admin/users/:id/accesses isteği gönderir.

CLI Yönetimi

bedrud user promote ve bedrud user demote komutları bir --role bayrağı kabul eder:

# Promote to superadmin (default)
bedrud user promote --email user@example.com
 
# Promote to admin
bedrud user promote --email user@example.com --role admin
 
# Promote to moderator
bedrud user promote --email user@example.com --role moderator
 
# Demote specific role
bedrud user demote --email user@example.com --role admin

Geçerli --role değerleri: superadmin, admin, moderator, user, guest.

Kod Konumları

DosyaAmaç
server/internal/models/user.goBackend erişim seviyesi sabitleri
server/internal/middleware/RequireAccess middleware’i
server/internal/usercli/usercli.goCLI rol yönetimi fonksiyonları
apps/web/src/lib/user.store.tsFrontend User türü
apps/web/src/routes/dashboard/admin.tsxAdmin koruması + isReadOnly bağlamı
apps/web/src/components/admin/UserTable.tsxRol seçici açılır menüsü + rozetler
apps/web/src/components/admin/RoomTable.tsxSalt okunur oda tablosu maskeleme