İçeriğe atla
Tüm makaleler
3 dk okuma

Çalışma alanınız bir güvenlik sınırıdır.

Sahiplik kontrollerinin neden her okuma ve yazmada olması gerektiği ve bir görev URL'sinin neden asla erişim vermemesi gerektiği.

supastack ekibi

Sahipliği sunucuda türetin

Kayıt kimliği bir şeyi tanımlar; onu kimin okuyabileceğini kanıtlamaz. supastack, kullanıcıya ait kayıtları workspaceId ile sınırlar. Sunucu, kimliği doğrulanmış kullanıcının çalışma alanını çözer ve bir kaydı okurken ya da değiştirirken bu kapsamı dahil eder.

Tarayıcı tarafından gönderilen bir çalışma alanı kimliğini sahiplik kanıtı olarak değerlendirmeyin. Tarayıcı bir eylem isteyebilir ama güvenilir sunucu bağlamı, bunun kimin eylemi olduğunu belirlemelidir. Bu kural; görev durumu, kayıtlı sağlayıcı yapılandırması, kullanım kayıtları ve ürüne ait her kaynak için geçerli olmalıdır. Yerleşimler ve bileşenler neyin çizileceğini filtreleyebilir ama çizim yetkilendirme değildir — kontrol, kaydın gerçekten okunduğu ya da yazıldığı yerde olmalıdır.

Bu yazıdaki diğer her şey o kuraldan çıkar: sahiplik istenmez, türetilir. İstemciden gelen bir workspaceId herhangi bir yerde güvenilir sayıldığı anda diğer her kontrol süslemeye dönüşür. Kimlik doğrulama yazısı oturumun bu sınırın yukarısında nasıl kurulduğunu anlatır.

Üyelik sınırın parçasıdır

Kapsam, bir kaydın hangi çalışma alanına ait olduğunu yanıtlar; üyelik, bu kullanıcının o çalışma alanına ait olup olmadığını yanıtlar. İkisini de sunucuda çözün. supastack kişisel ve organizasyon çalışma alanlarını sahip, yönetici ve üye rolleriyle modeller — çalışma alanları kılavuzu modeli belgeler.

Roller ikinci bir eksen ekler: üye, yalnızca yöneticinin değiştirebildiğini okuyabilir. İki kontrolü ayrı tutun — “bu çalışma alanına ait” ve “bu eylemi yapabilir” — böylece bir rütbe düşürme ya da çıkarma diğer her şeyle aynı sınırda etki eder. Davetler ve çıkarmalar bir yönetici sonradan düşüncesi değil, aynı yaşam döngüsünün parçasıdır.

Üyelik değişikliklerinin de anında etki etmesi gerekir. Çıkarılmış bir üyenin sonraki isteği, önbelleğe alınmış bir jeton ne zaman süresi dolarsa değil, sınırda başarısız olmalıdır — kontrolün daha önce verilmiş bir kimlik bilgisinin içinde değil, kayıtların okunduğu yerde yaşamasının bir nedeni daha budur.

Başarısız olması gereken istekleri test edin

Sahibin bir kaydı almasına izin veren test mutlu yolu kanıtlar. Yalıtımı kanıtlamaz. Aynı kaydı isteyen ikinci bir çalışma alanı, anonim bir istek ve başka bir sahibi yerine koymaya çalışan bir yazmayla eşleştirin.

Kalıcı sonucun yanında dış davranışı da doğrulayın. Reddedilen bir istek başka bir çalışma alanının verisini değiştirmemeli ve hata yanıtı gizli anahtarları ya da ham veritabanı ayrıntılarını sızdırmamalıdır. Bu kontroller, uygulama değiştiğinde sınırı gözden geçirilebilir kılar.

  • İkinci bir çalışma alanı aynı kayıt kimliğini ister — reddedilir.
  • Anonim bir istek aynı uç noktaya gelir — reddedilir.
  • Çalışma alanından çıkarılmış bir üye yeniden dener — reddedilir.
  • Bir yazma farklı bir sahip ya da çalışma alanı adlandırır — reddedilir ve hiçbir şey değişmez.
  • Hata yanıtları genel kalır — sır yok, şema ayrıntısı yok.

Kuralı ürününüze taşıyın

Yeni bir ürün tablosu eklerken ekranı oluşturmadan önce sahipliğine karar verin. Kalıcılık modeline workspaceId dahil edin, çalışma alanını mevcut sunucu sınırı üzerinden çözün ve bu bağlamı hem liste hem detay işlemlerinde kullanın.

Arka plan işçileri de aynı özeni gerektirir. Kuyruğa alınmış bir görev, doğru kaydı yüklemek için yeterli güvenilir bağlam taşımalı, sağlayıcı kimlik bilgileri ise sunucuda kalmalıdır. Tutarlı bir sahiplik kuralı, rota bazlı istisnalar koleksiyonundan daha kolay bakım yapılabilirdir.

API yüzeyi de aynı sınıra aittir. Çalışma alanı API anahtarları ve imzalı giden webhook'lar çalışma alanının kapsamını beraberinde taşır — bir anahtar asla kiracılar arası okuma yolu olmamalı ve bir webhook yükü asla komşunun kayıtlarını taşımamalıdır. API modülü kılavuzu bu yüzeyin şeklini anlatır.

Çalışma alanı yalıtımı hakkında sık sorulan sorular

Çok kiracılı yalıtım her projede aynı avuç soruyu gündeme getirir. Erken netleştirmeye değer olanlar bunlardır.

  • Uygulama düzeyi kapsam yeterli mi, satır düzeyi güvenlik mi gerekir? — Her okuma ve yazmada sunucu tarafından uygulanan kapsam, çoğu SaaS için tehdit modelini karşılar. Veritabanı RLS'i derin savunma ekler ama sınır kontrollerinin yerini almaz — işçiler ve API anahtarları hâlâ aynı kurala ihtiyaç duyar.
  • Çalışma alanları arası paylaşım nasıl çalışmalı? — Kapsamı zayıflatmak yerine açıkça modelleyin — bir davet, bir üyelik satırı. “Bağlantıya sahip olan herkes” bir kaza değil, kendi kontrolleri olan tasarlanmış bir özellik olmalıdır.
  • Çok kiracılı uygulamalarda önce ne bozulur? — Kolaylık yolları: kurtarma bağlantıları, yönetici araçları, kayıtları çıplak kimlikle yükleyen arka plan işçileri. Normal kapsamdan geçmeden bir kayda dokunan her kod yolunu denetleyin.
  • Var olan bir tabloya kapsam nasıl eklerim? — workspaceId ekleyin, geriye dönük doldurun, okuma ve yazmalarda uygulayın, sonra UI'a dokunun. Sınır varsayılmış değil kanıtlanmış olsun diye olumsuz testleri önce çıkarın.
  • Sayfa korunuyorsa sunucu eylemlerinin kontrole ihtiyacı var mı? — Evet. Sayfa korumaları ekranları gizler; işlemleri yetkilendirmez. Her eylem oturumu ve çalışma alanını bağımsız çözer.

Sık sorulan sorular

14 soru

supastack nedir?

supastack, YZ destekli SaaS ürünleri oluşturmak için modüler bir temeldir. Ortak altyapıyı bir araya getirir, böylece ürüne özgü özelliklere odaklanabilirsiniz.

Web ve mobil destekliyor mu?

Evet. supastack, web ve mobil deneyimler için başlangıç noktası olarak Next.js ve Expo uygulamaları içerir.

Hangi kimlik doğrulama dahil?

Better Auth; e-posta/parola, OTP ve sosyal girişi kapsar. Kişisel çalışma alanları hesapla birlikte sağlanır, böylece ürün kayıtları ilk günden itibaren sınırlı kalır.

YZ'yi nasıl destekliyor?

supastack; yapılandırılabilir çok sağlayıcılı YZ, kullanım takibi, bütçeler ve şifreli kendi-anahtarını-getir desteği içerir.

Abonelikler nasıl ele alınıyor?

Kit üzerine kurulu ürünler için Stripe faturalama, abonelikler ve yetkilendirmeler ücretli erişim temelini oluşturur. Sağlayıcı gizli anahtarları yalnızca sunucuda kalır.

Ürüne özgü kodum nerede durur?

Ürüne özgü özellikler ayrı bir kod tabanında kalırken ürün, supastack'in temel modüllerini yapılandırır ve entegre eder.

supastack fiyatlandırması nasıl çalışır?

Kit, ömür boyu güncellemeli tek seferlik bir satın alımdır: 249 $'a Tek Platform (geçici tanıtım fiyatı — normal fiyat 349 $ üzerinden 100 $ indirim) — Next.js (Web), Expo (iOS ve Android) veya Tauri (macOS ve Windows Masaüstü) seçiminiz — ya da tüm platformları ve tam monorepo'yu içeren 499 $'lık Tüm Platformlar Paketi (geçici tanıtım fiyatı — normal fiyat 599 $ üzerinden 100 $ indirim); ek geliştirici koltuğu başına 75 $. Kit aboneliği yok. Bu sitedeki ödeme, lisans anahtarınızı e-postayla teslim eder ve depo erişimi GitHub davetiyle sağlanır.

Çalışma alanları verilerimi nasıl sınırlar?

Kullanıcıya ait kayıtlar workspaceId ile sınırlanır. Kimlik, yetkilendirmeler, YZ kullanımı, faturalama olayları ve denetim kayıtları kişisel çalışma alanı sınırının içinde kalır.

Arka plan işleri nasıl çalışır?

Trigger.dev açık iş çalışma zamanıdır. JobRunner sözleşmesi yalnızca enqueue, status ve cancel vaat eder — iş akışı semantiği Trigger.dev'e özgü ve açık kalır.

E-posta, tanıtım yazılarından nasıl farklı?

İşlemsel e-posta, tamamlanma bildirimleri gibi ürün iş akışlarını kapsar. Soğuk tanıtım ve kampanyalar, bu kitin e-posta modülünün dışında kalan ürün konularıdır.

Mobil satın almalar nasıl çalışır?

Mobil uygulama RevenueCat ile yerel satın alma ve geri yükleme sunar; erişimi sunucunuz doğrular. Yayınlamadan önce mağaza hesaplarını yapılandırın ve cihaz testlerini tamamlayın. Web faturalandırması ayrı kalır.

YZ sağlayıcı anahtarları nerede durur?

Kendi-anahtarını-getir kimlik bilgileri şifrelidir ve yalnızca sunucuda kalır. Anahtarlar günlüklerden gizlenir; kullanım ve bütçeler çalışma alanı düzeyinde görünür kalır.

Ödeme hangi ödeme yöntemlerini kabul ediyor?

Stripe tarafından barındırılan ödeme sayfası kartları kabul eder; cüzdanlar Stripe hesabında etkinleştirildiğinde Alipay ve WeChat Pay de sunabilir — Çin'deki alıcılar için kullanışlı. Cüzdan yetkilendirmeleri eşzamansız onaylanır; ödeme tamamlanır tamamlanmaz lisans sayfası güncellenir.

Geri ödeme alabilir miyim?

Depoya erişim kazandıktan sonra supastack sonsuza kadar sizin olur, bu nedenle geri ödeme yapılamaz. Ancak içiniz rahat olsun: kendiniz veya müşterileriniz için sınırsız sayıda ürün geliştirip yayınlamak üzere ömür boyu güncellemeler içeren eksiksiz kaynak koduna sahip olursunuz. Yalnızca kodu yeniden satamaz veya depoyu bir başlangıç kiti ya da şablon olarak yeniden dağıtamazsınız.

TR