Veri

EF Core'da çok kiracılı veri: kiracı yoksa satır da yok

Yazar, SaaS uygulamalarında kiracılar arası veri sızıntısını önlemek için EF Core global query filter ile kiracı izolasyonu desenini anlatıyor. Kiracı bilgisi yoksa sorgular boş dönüyor. Kiracıya özel benzersiz indeksler ve IgnoreQueryFilters() kullanımının sınırlandırılması da ele alınıyor. Çok kiracılı API geliştiren herkes için pratik bir başlangıç noktası.

DEV Community: #efcore Zohaib Ahmad
Yayın tarihi
Okuma süresi
3 dk okuma
agent çalıştırması #15
agent çalıştırması #15
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Tenant'a ait tüm entity'ler ortak bir TenantId taşımalı ve HasQueryFilter ile filtrelenmeli
  • CurrentTenantId Guid? olduğunda null kiracı hiçbir satır eşleştirmez, yani varsayılan davranış kapalıdır
  • Benzersiz indeksler (TenantId, Phone) gibi kiracı anahtarını içermeli
  • IgnoreQueryFilters() yalnızca oturum açma, kayıt ve platform işlerinde kullanılmalı ve kod incelemesinde kontrol edilmeli
  • İki kiracılı entegrasyon testi, eksik filtreyi üretime çıkmadan yakalamanın en değerli yoludur

Çok kiracılı bir SaaS uygulamasında en ciddi hatalardan biri, bir müşterinin başka bir müşterinin verisini görmesidir. Yazar, bu riski sorgu yazan her geliştiriciye bırakmak yerine EF Core'un global query filter özelliğiyle kiracı filtresini veritabanı bağlamına merkezi olarak eklemeyi öneriyor. Tüm kiracıya ait varlıklar ortak bir TenantId taşıyor ve DbContext, geçerli kullanıcının kiracısını alarak her sorguya otomatik filtre uyguluyor.

Kritik detay, kiracı bilgisinin null olması durumunda filtrenin hiçbir satır döndürmemesidir; böylece unutulmuş bir yetkilendirme veya kiracısız arka plan işi tüm verileri değil boş liste döndürür. Kiracıya özel benzersiz indeksler, aynı telefon numarasının farklı işletmelerde tekrar edebilmesini sağlıyor. IgnoreQueryFilters() çağrılarının oturum açma gibi sınırlı yerlerle kısıtlanması ve iki kiracıyla yazılan bir entegrasyon testinin bu hataları yakalaması da önerilen uygulamalar arasında.

Gerçek dünyada kullanımı

  • Birden fazla işletmeye hizmet veren bir POS veya randevu SaaS'ı, her sorguda kiracı filtresini otomatik uygulamak için
  • Oturum açmadan erişilen veya arka plan işi çalıştıran API'ler, kiracı yokken boş sonuç dönmesi gereken durumlar
  • Kiracı başına benzersiz alanlar gereken uygulamalar, örneğin işletme içinde tekil müşteri telefonu

Neden önemli

Kiracı filtresini her sorguda elle yazmak yerine DbContext seviyesinde tanımlamak, veri sızıntısı riskini önemli ölçüde azaltır. Yeni eklenen entity'lerde filtreyi unutmak da test ile yakalanabilir hale gelir.

Bu özet, DEV Community: #efcore üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü