Skip to content

Latest commit

 

History

History
169 lines (133 loc) · 4.68 KB

File metadata and controls

169 lines (133 loc) · 4.68 KB

Güvenli Rol Yapısı Kılavuzu

Genel Bakış

Bu sistem, rol yönetimini güvenli hale getirmek için tek kaynak gerçeği (Single Source of Truth) prensibini kullanır.

Güvenlik Özellikleri

1. Tek Kaynak Gerçeği

  • Ana Kaynak: users tablosu (veritabanı)
  • Cache: Auth metadata (JWT token)
  • Rol bilgisi sadece veritabanında tutulur, auth metadata sadece cache olarak kullanılır

2. Admin Kontrolü

  • Sadece admin ve owner rolündeki kullanıcılar rol değişikliği yapabilir
  • Tüm rol değişiklikleri loglanır
  • Yetkisiz işlemler engellenir

3. RLS (Row Level Security)

  • Veritabanı seviyesinde güvenlik
  • Kullanıcılar sadece yetkili oldukları verilere erişebilir
  • SQL injection ve yetkisiz erişim koruması

4. Environment Variable Güvenliği ⚠️

  • Tüm API key'ler environment variable'lardan alınır
  • Hardcoded key'ler tamamen kaldırıldı
  • Service role key'i sadece server-side işlemlerde kullanılır
  • Public key'ler NEXT_PUBLIC_ prefix'i ile browser'da erişilebilir
  • Private key'ler sadece server-side environment'da kullanılabilir

Rol Hiyerarşisi

owner > admin > manager > waiter > pending

Yetki Seviyeleri:

  • Owner: Tam yetki
  • Admin: Kullanıcı yönetimi, sistem ayarları
  • Manager: Menü yönetimi, raporlar
  • Waiter: Sipariş alma, masa yönetimi
  • Pending: Onay bekleyen kullanıcılar

Kurulum Adımları

1. Environment Variables'ı Ayarla

# env.example dosyasını .env.local olarak kopyala
cp env.example .env.local

# Gerçek Supabase değerlerini .env.local dosyasına ekle:
NEXT_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key

2. Migration Script'ini Çalıştır

node scripts/migrate-roles.js

3. RLS Politikalarını Uygula

-- Supabase Dashboard > SQL Editor'da çalıştır
-- supabase/migrations/20241220_add_rls_policies.sql dosyasındaki komutları

3. Güvenli Fonksiyonları Kullan

import { getUserRole, updateUserRole, hasRole } from '../lib/auth-utils';

// Rol kontrolü
const userRole = await getUserRole(userId);

// Yetki kontrolü
const canManageUsers = await hasRole(userId, ['admin', 'owner']);

// Rol güncelleme (sadece admin/owner)
const result = await updateUserRole(userId, newRole, adminUserId);

Güvenlik Kontrol Listesi

✅ Tamamlanan

  • Tek kaynak gerçeği (users tablosu)
  • Admin yetki kontrolü
  • Güvenli rol güncelleme fonksiyonları
  • RLS politikaları
  • Migration script'i
  • Auth metadata cache sistemi
  • Environment variable güvenliği
  • Hardcoded key'lerin kaldırılması

🔄 Devam Eden

  • Audit trail sistemi
  • Rol değişiklik logları
  • Otomatik backup sistemi
  • Güvenlik testleri

Kullanım Örnekleri

Rol Kontrolü

// Güvenli rol kontrolü
const userRole = await getUserRole(userId);
if (userRole === 'pending') {
  // Kullanıcı henüz onaylanmamış
  return;
}

Yetki Kontrolü

// Belirli yetkileri kontrol et
const canAccessDashboard = await hasRole(userId, ['owner', 'admin']);
const canManageMenu = await hasRole(userId, ['owner', 'admin', 'manager']);

Rol Güncelleme

// Sadece admin/owner yapabilir
const result = await updateUserRole(userId, 'manager', adminUserId);
if (result.success) {
  console.log('Rol güncellendi');
} else {
  console.error('Hata:', result.error);
}

Güvenlik İpuçları

  1. JWT Token Manipülasyonu: Client-side'da rol değiştirilemez
  2. Admin Kontrolü: Sadece yetkili kullanıcılar rol değiştirebilir
  3. Veritabanı Güvenliği: RLS ile korunur
  4. Audit Trail: Tüm değişiklikler izlenebilir
  5. Fallback Mekanizması: Auth metadata cache olarak kullanılır

Sorun Giderme

Rol Görünmüyor

  1. Migration script'ini çalıştırın
  2. Auth metadata'yı kontrol edin
  3. Users tablosundaki rolü kontrol edin

Yetki Hatası

  1. Kullanıcının rolünü kontrol edin
  2. RLS politikalarını kontrol edin
  3. Admin yetkisini doğrulayın

Migration Hatası

  1. Service role key'i kontrol edin
  2. Supabase bağlantısını test edin
  3. Kullanıcı verilerini kontrol edin

Gelecek Geliştirmeler

  1. Audit Trail: Tüm rol değişikliklerini loglama
  2. Otomatik Backup: Rol verilerinin otomatik yedeklenmesi
  3. Güvenlik Testleri: Otomatik güvenlik testleri
  4. Bildirim Sistemi: Rol değişikliklerinde bildirim
  5. Geçmiş Görüntüleme: Rol değişiklik geçmişi

Destek

Güvenlik sorunları için:

  • Supabase Dashboard > Logs
  • Console logları
  • Network tab'ı
  • RLS policy testleri