Firestore güvenlik kuralları üretici

Erişim şeklini seç, koleksiyon adını gir: kopyalanabilir Firestore security rules ve emulator test kodu al.

Adım 1 / 2

Erişimi nasıl sınırlamak istiyorsun?

Bunu kendi projene mi taşımak istiyorsun?

45 dakikalık keşif görüşmesinde konuşalım.

Görüşme ayarla

Firebase Studio, Lovable veya Bolt gibi araçlar bir Firestore koleksiyonu açar, satır seviyesinde erişim kuralını yazmaz. Firebase'in kendi dokümanı kural sözdizimini anlatır ama senin koleksiyon ve alan adlarına özel kural üretmez. Bu araç dört erişim şekli için: uid sahipliği, takım/organizasyon üyeliği, herkese açık okuma ve admin custom claim kontrolü, kopyalanabilir Firestore security rules üretir.

İki kural Postgres'teki Supabase RLS üreticimizden farklı çalışır, çünkü Firestore ayrı bir modelde: Postgres'te olduğu gibi ayrı bir "RLS'i aç" satırı yok, Firestore zaten varsayılan olarak her şeyi reddediyor. Takım/organizasyon deseninde SQL join yerine get() ve exists() kullanılıyor, ikisi de veritabanı yolunu $(database) ile enjekte etmeyi istiyor; bu yüzden üyelik belgesinin id'si doğrudan kullanıcının uid'i. Admin deseninde ayrı bir admin tablosu yok: custom claim, Admin SDK'nın setCustomUserClaims() metoduyla sadece sunucu tarafında atanır ve kullanıcı yeniden giriş yapmadan, token'ı doğal süresi dolmadan ya da getIdToken(true) çağrılmadan request.auth.token'da görünmez.

Üretilen kural bir şablon, Firebase projene bağlanmıyor ve şemanı okumuyor: kendi koleksiyon ve alan adlarını girip emulator'de dene, doğrudan üretime deploy etme. Lovable ve Bolt ile açılan katmanlarda hangi açıkların tekrarlandığını bu yazıda okuyabilirsin. Kritik bulguları kendin kapatamıyorsan yapay zeka projesi tamamlama hizmetimiz devralıyor.

Sık sorulanlar

Bu araç Firebase projeme bağlanıyor mu?

Hayır. Tarayıcında çalışıyor, projene bağlanmıyor, şema okumuyor. Girdiğin koleksiyon ve alan adlarından kural üretiyor; deploy etmeden önce Firebase emulator ile test et.

Neden takım/organizasyon deseninde bir tablo join'i yok?

Firestore'da SQL join yok. Bunun yerine üretilen kural get() ve exists() ile üyelik koleksiyonundaki kendi belgeni ($(request.auth.uid) id'li) okuyor ve orgIds dizisinde arıyor. Bu yüzden üyelik koleksiyonunda her belgenin id'si kullanıcının uid'i olmalı.

Admin kuralını seçtim ama request.auth.token'da claim görünmüyor, neden?

Custom claim sadece sunucu tarafında Admin SDK'nın setCustomUserClaims() metoduyla atanır. Atadıktan sonra kullanıcı yeniden giriş yapana, token'ı doğal süresi dolana ya da sen getIdToken(true) çağırana kadar yeni claim istemcide görünmez.

Dört erişim şeklinden hangisini seçeceğimi bilmiyorum, ne olur?

Her seçenek kısa bir açıklama içeriyor: belgeyi kimin görüp değiştirebileceğini anlatıyor. Yanlış seçersen baştan başla düğmesiyle sıfırdan başlarsın, hiçbir cevap kaydedilmiyor.