Cloud Firestore Security Rules dokümanlara erişimi kontrol etmenizi sağlar ve koleksiyonlar ekleyebilirsiniz. Esnek kurallar söz dizimi, tüm yazmalardan veritabanının tamamına ve işlemlere kadar her şeyle eşleşen kurallar belirli bir doküman üzerinde.
Bu kılavuzda, güvenlik kurallarının temel söz dizimi ve yapısı açıklanmaktadır. Birleştir güvenlik kuralı koşulları ile bu söz dizimini tam kural setlerini kullanın.
Hizmet ve veritabanı beyanı
Cloud Firestore Security Rules daima şu beyanla başlar:
service cloud.firestore {
match /databases/{database}/documents {
// ...
}
}
service cloud.firestore
bildirimi, kuralların kapsamını
Cloud Firestore, Cloud Firestore Security Rules ile arasındaki çakışmaları önliyor
diğer ürünler için geçerli kuralları da içerir.
match /databases/{database}/documents
bildirimi, kuralların şu şekilde olması gerektiğini belirtir:
projedeki herhangi bir Cloud Firestore veritabanıyla eşleşmelidir. Şu anda her bir proje
(default)
adında yalnızca tek bir veritabanı var.
Temel okuma/yazma kuralları
Temel kurallar, bir belge yolunu belirten ve bir belge yolunu belirten bir match
belirtilen veriler okunurken ayrıntı veren bir allow
ifadesine izin verilir:
service cloud.firestore {
match /databases/{database}/documents {
// Match any document in the 'cities' collection
match /cities/{city} {
allow read: if <condition>;
allow write: if <condition>;
}
}
}
Tüm eşleşme ifadeleri koleksiyonları değil, dokümanları işaret etmelidir. Maç
ifadesi, match /cities/SF
gibi belirli bir dokümana işaret edebilir veya joker karakterler kullanabilir
belirtilen yoldaki herhangi bir dokümana işaret etmesini sağlar (ör. match /cities/{city}
).
Yukarıdaki örnekte, eşleşme ifadesinde {city}
joker karakter söz dizimi kullanılır.
Bu, kuralın cities
koleksiyonundaki tüm dokümanlar için geçerli olduğu anlamına gelir:
/cities/SF
veya /cities/NYC
. Eşleşme ifadesindeki allow
ifadeleri
city
değişkeni şehir dokümanının adına,
SF
veya NYC
gibi.
Ayrıntılı işlemler
Bazı durumlarda, read
ve write
metriklerini daha küçük gruplara ayırmak yararlı olur
ayrıntılı işlemlerdir. Örneğin, uygulamanız farklı
daha fazla koşula uygun düşebilir. Dilerseniz
tek belge okumalarına izin verir ancak büyük sorguları reddeder.
read
kuralı get
ve list
özelliklerine ayrılabilirken write
kuralı şunları yapabilir:
create
, update
ve delete
olarak ayrılmalıdır:
service cloud.firestore {
match /databases/{database}/documents {
// A read rule can be divided into get and list rules
match /cities/{city} {
// Applies to single document read requests
allow get: if <condition>;
// Applies to queries and collection read requests
allow list: if <condition>;
}
// A write rule can be divided into create, update, and delete rules
match /cities/{city} {
// Applies to writes to nonexistent documents
allow create: if <condition>;
// Applies to writes to existing documents
allow update: if <condition>;
// Applies to delete operations
allow delete: if <condition>;
}
}
}
Hiyerarşik veriler
Cloud Firestore ürünündeki veriler doküman koleksiyonları halinde düzenlenir ve her bir hiyerarşiyi alt koleksiyonlar yoluyla genişletebilir. Bu nedenle, ve güvenlik kurallarının hiyerarşik verilerle nasıl etkileşime girdiğini anlamanızı sağlar.
cities
koleksiyonundaki her dokümanın bir
landmarks
alt koleksiyon. Güvenlik kuralları yalnızca eşleşen yolda geçerli olduğundan
cities
koleksiyonunda tanımlanan erişim denetimleri
landmarks
alt koleksiyon. Bunun yerine, erişimi kontrol etmek için açık kurallar yazın
alt koleksiyonlara:
service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city} {
allow read, write: if <condition>;
// Explicitly define rules for the 'landmarks' subcollection
match /landmarks/{landmark} {
allow read, write: if <condition>;
}
}
}
}
match
ifadelerini iç içe yerleştirirken iç match
ifadesinin yolu her zaman
dış match
ifadesinin yolu ile göreceli olarak. Aşağıdaki kural kümeleri
dolayısıyla eşdeğerdir:
service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city} {
match /landmarks/{landmark} {
allow read, write: if <condition>;
}
}
}
}
service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city}/landmarks/{landmark} {
allow read, write: if <condition>;
}
}
}
Yinelemeli joker karakterler
Kuralların rastgele derin bir hiyerarşiye uygulanmasını istiyorsanız
yinelemeli joker karakter söz dizimi, {name=**}
. Örneğin:
service cloud.firestore {
match /databases/{database}/documents {
// Matches any document in the cities collection as well as any document
// in a subcollection.
match /cities/{document=**} {
allow read, write: if <condition>;
}
}
}
Yinelemeli joker karakter söz dizimini kullanırken joker karakter değişkeni,
Doküman derin bir şekilde iç içe yerleştirilmiş bir koleksiyonda bulunsa bile, eşleşen yol segmentinin tamamı
alt koleksiyon oluşturun. Örneğin, yukarıda listelenen kurallar,
/cities/SF/landmarks/coit_tower
adresinde bulunan bir doküman ve
document
değişkeni SF/landmarks/coit_tower
olur.
Bununla birlikte, yinelemeli joker karakterlerin davranışının kurallara bağlı olduğunu unutmayın sürümünü değil.
Sürüm 1
Güvenlik kuralları varsayılan olarak sürüm 1'i kullanır. Sürüm 1'de, yinelemeli joker karakterler
bir veya daha fazla yol öğesiyle eşleşiyor. Boş bir yolla eşleşmezler, bu nedenle
match /cities/{city}/{document=**}
, alt koleksiyonlardaki dokümanlarla eşleşir, ancak
cities
koleksiyonunda yok, ancak match /cities/{document=**}
eşleşiyor
hem cities
koleksiyonundaki hem de alt koleksiyonlardaki dokümanlara eşittir.
Yinelemeli joker karakterler, eşleşme ifadesinin sonuna gelmelidir.
Sürüm 2
Güvenlik kurallarının 2. sürümünde, yinelemeli joker karakterler sıfır veya daha fazla yolla eşleşiyor
öğeler. match/cities/{city}/{document=**}
, herhangi bir dokümandaki dokümanlarla eşleşir
alt koleksiyonlar ve cities
koleksiyonundaki dokümanlar.
URL'nin üstüne rules_version = '2';
ekleyerek sürüm 2'ye dahil olmanız gerekir
güvenlik kurallarınız:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Matches any document in the cities collection as well as any document
// in a subcollection.
match /cities/{city}/{document=**} {
allow read, write: if <condition>;
}
}
}
Eşleşme ifadesi başına en fazla bir yinelemeli joker karakteriniz olabilir, ancak sürüm 2. Bu joker karakteri, eşleşme ifadesinde herhangi bir yere yerleştirebilirsiniz. Örneğin:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Matches any document in the songs collection group
match /{path=**}/songs/{song} {
allow read, write: if <condition>;
}
}
}
Koleksiyon grubu sorgularını kullanıyorsanız 2. sürüm için Koleksiyon grubu sorgularının güvenliğini sağlama başlıklı makaleyi inceleyin.
Çakışan eşleşme ifadeleri
Bir doküman birden fazla match
ifadesiyle eşleşebilir.
birden fazla allow
ifadesinin bir istekle eşleştiği durumda, erişime izin verilir
koşullardan herhangi biri true
ise:
service cloud.firestore {
match /databases/{database}/documents {
// Matches any document in the 'cities' collection.
match /cities/{city} {
allow read, write: if false;
}
// Matches any document in the 'cities' collection or subcollections.
match /cities/{document=**} {
allow read, write: if true;
}
}
}
Yukarıdaki örnekte, cities
koleksiyonundaki tüm okuma ve yazma işlemleri
ilk kural olsa bile ikinci kural her zaman true
olduğu için izin verilir
kural her zaman false
şeklindedir.
Güvenlik kuralı sınırları
Güvenlik kurallarıyla çalışırken aşağıdaki sınırlara dikkat edin:
Sınır | Ayrıntılar |
---|---|
İstek başına maksimum exists() , get() ve getAfter() çağrısı sayısı |
Her iki sınırın da aşılması, "izin verilmedi" hatasıyla sonuçlanır. Bazı belge erişimi çağrıları önbelleğe alınabilir. Önbelleğe alınan çağrılar sınırlamaya dahil edilmez. |
Maksimum iç içe yerleştirilen match ifadesi derinliği |
10 |
Yol segmentlerinde, iç içe yerleştirilmiş bir grup match ifadesinde izin verilen maksimum yol uzunluğu |
100 |
İç içe yerleştirilen bir grup match ifadesinde izin verilen maksimum yol yakalama değişkeni sayısı |
20 |
Maksimum işlev çağrısı derinliği | 20 |
Maksimum işlev bağımsız değişkeni sayısı | 7 |
İşlev başına maksimum let işlev bağlama sayısı |
10 |
Maksimum yinelenen veya döngüsel işlev çağrısı sayısı | 0 (izin verilmez) |
İstek başına değerlendirilen maksimum ifade sayısı | 1.000 |
Maksimum kural grubu boyutu | Kural kümeleri iki boyut sınırına uymalıdır:
|
Sonraki adımlar
- Özel güvenlik kuralı koşullarını yazın.
- Güvenlik kuralları referansını okuyun.