Cloud Storage için Firebase Security Rules, kimlerin okuma ve yazma erişimine sahip olduğunu belirlemek amacıyla kullanılır
ve dosyaların nasıl yapılandırıldığı hakkında daha fazla bilgiyi Cloud Storage
ve hangi meta verileri içerdiklerini
göz önünde bulundurur. Cloud Storage Security Rules,
request
ve resource
öğelerini göz önünde bulundurarak, istenen bir işleme izin verebilir veya reddedebilirsiniz. Örneğin,
dosya yükleme veya dosya meta verileri alma gibi
işlemler yapılmalıdır. Bu referans belgelerinde,
kural türleri, request
ve resource
özellikleri, veriler
Cloud Storage Security Rules tarafından kullanılan türler ve hataların nasıl oluştuğu.
Kural
rule
, request
öğesinin aşağıdaki gibi olup olmadığını belirlemek için değerlendirilen bir ifadedir:
istenen bir işlemi gerçekleştirmesine
olanak tanır.
Türler
İzin ver
allow
kuralları, read
veya write
gibi bir yöntemin yanı sıra
isteğe bağlı bir koşuldur. Bir kural yürütüldüğünde koşul değerlendirilir ve
koşul true
olarak değerlendirilirse istenen yönteme izin verilir; aksi takdirde
yöntem reddedilir. Koşulsuz bir allow
kuralı her zaman
tercih edebilirsiniz.
// Always allow method allow <method>; // Allow method if condition is true allow <method>: if <condition>;
Şu anda desteklenen tek kural türü allow
'tır.
İstek Yöntemleri
Okuma
read
yöntemi, dosya verilerinin veya meta verilerinin okunduğu tüm istekleri kapsar.
dosya indirme işlemleri ve dosya meta veri okumaları dahil.
// Always allow reads allow read; // Allow reads if condition evaluates to true allow read: if <condition>;
Yazma
write
yöntemi, dosya verilerinin veya meta verilerin yazıldığı tüm istekleri kapsar.
dosya yüklemeleri, dosya silme işlemleri ve dosya meta veri güncellemeleri dahil.
// Always allow writes allow write; // Allow writes if condition evaluates to true allow write: if <condition>;
Maç
Kurallar, bir kullanıcı request
gerçekleştirdiğinde (ör. dosya yükleme veya indirme) yürütülür
bir kural kapsamındaki dosya yoluyla eşleşir. match
, bir yol ve bir gövdeden oluşur.
Bu değer en az bir allow
kuralı içermelidir. Hiçbir yol eşleşmezse istek
reddedilir.
Tam adlandırılmış bir yol için match
işlemi gerçekleştirebilir veya tüm seçeneklerle eşleşecek joker karakterler ekleyebilirsiniz
yollarını gösterir.
Yol Segmentleri
single_segment
Depolanan dosyayla eşleşen bir kural oluşturmak için tek yol segmentlerini kullanabilirsiniz Cloud Storage içinde.
// Allow read at "path" if condition evaluates to true match /path { allow read: if <condition>; }
Birden çok yol segmentine ve iç içe yerleştirilmiş yollara da izin verilir:
// Allow read at "path/to/object" if condition evaluates to true match /path { match /to { match /object { allow read: if <condition>; } } }
{single_segment_wildcard}
Bir kuralı aynı yoldaki birden fazla dosyaya uygulamak isterseniz
belirli bir yoldaki tüm dosyaları eşleştirmek için joker karakter yol segmenti. Joker karakter değişkeni
bir değişken süslü ayraç içine sarılarak bir yol içinde bildirilir: {variable}
.
Bu değişkene, eşleşme ifadesi içinde string
olarak erişilebilir.
// Allow read at any path "/*", if condition evaluates to true match /{single_path} { // Matches "path", "to", or "object" but not "path/to/object" allow read: if <condition>; }
Birden çok yol segmenti ve iç içe yerleştirilmiş yollar joker karakterler içerebilir:
// Allow read at any path "/path/*/newPath/*", if condition evaluates to true match /path/{first_wildcard} { match /newPath/{second_wildcard} { // Matches "path/to/newPath/newObject" or "path/from/newPath/oldObject" allow read: if <condition>; } }
{multi_segment_wildcard=**}
Bir yolun altında veya altında herhangi bir sayıda yol segmentini eşleştirmek istiyorsanız Bu çok segmentli joker karakter, konum. Bu, bir kullanıcıya kendi serbest biçimini sağlarken yararlı olabilir birçok farklı yol segmentiyle eşleşen kurallar (ör. herkese açık bir şekilde okunabilir bir dosya grubu oluşturmak veya için geçerlidir).
Çok segmentli joker karakter yolu, tek bir segmente benzer şekilde bildirilir
değişkenin sonuna =**
eklenerek joker karakter:
{variable=**}
. Eşleşmede çok segmentli bir joker karakter değişkeni mevcut
ifadesini path
nesnesi olarak tanımlar.
// Allow read at any path "/**", if condition evaluates to true match /{multi_path=**} { // Matches anything at or below this, from "path", "path/to", "path/to/object", ... allow read: if <condition>; }
İstek
request
değişkeni,
istekte bulunulan yoldan yapılabilir. request
değişkeni
özellikleri tanımlar.
Özellikler
auth
Kimliği doğrulanmış bir kullanıcı Cloud Storage için bir istek gerçekleştirdiğinde
auth
değişkeni, kullanıcının uid
(request.auth.uid
) değeriyle doldurulur.
ve Firebase Authentication JWT (request.auth.token
) iddialarına da yer verilmiştir.
request.auth.token
, şu anahtarların bir kısmını veya tamamını içeriyor:
Alan | Açıklama |
---|---|
email |
Hesapla ilişkili e-posta adresi (varsa). |
email_verified |
Kullanıcı, email adresine erişimi olduğunu doğruladıysa true . Bazı sağlayıcılar, sahip oldukları e-posta adreslerini otomatik olarak doğrular. |
phone_number |
Varsa, hesapla ilişkili telefon numarası. |
name |
Ayarlanmışsa, kullanıcının görünen adı. |
sub |
Kullanıcının Firebase UID'si. Bu, proje içinde benzersizdir. |
firebase.identities |
Bu kullanıcının hesabıyla ilişkili tüm kimliklerin sözlüğü. Sözlük anahtarları şunlardan herhangi biri olabilir: email , phone , google.com , facebook.com , github.com , twitter.com . Sözlüğün değerleri, hesapla ilişkilendirilen her kimlik sağlayıcıya ait benzersiz tanımlayıcı dizileridir. Örneğin, auth.token.firebase.identities["google.com"][0] , hesapla ilişkilendirilen ilk Google kullanıcı kimliğini içerir. |
firebase.sign_in_provider |
Bu jetonu almak için kullanılan oturum açma sağlayıcısı. Şu dizelerden biri olabilir: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com . |
firebase.tenant |
Varsa, hesapla ilişkili kiracı kimliği. ör. tenant2-m6tyz . |
Özel kimlik doğrulama kullanılıyorsa request.auth.token
, özel kimlik doğrulamaları da
hak talepleri için geçerlidir.
Kimliği doğrulanmamış bir kullanıcı istek gerçekleştirdiğinde request.auth
, null
olur.
// Allow requests from authenticated users allow read, write: if request.auth != null;
path
path
değişkeni, request
işleminin gerçekleştirildiği yolu içerir
.
// Allow a request if the first path segment equals "images" allow read, write: if request.path[0] == 'images';
resource
resource
değişkeni, yüklenmekte olan bir dosyanın meta verilerini veya
mevcut bir dosya için güncellenmiş meta verileri. Konu,
Şu konumdaki geçerli dosya meta verilerini içeren resource
değişkeni
yeni meta verilerin aksine istenen yolda yer alır.
// Allow a request if the new value is smaller than 5MB allow read, write: if request.resource.size < 5 * 1024 * 1024;
request.resource
, resource
sağlayıcısından aşağıdaki mülkleri içeriyor:
Özellik |
---|
name |
bucket |
metadata |
size |
contentType |
time
time
değişkeni, geçerli sunucu saatini temsil eden bir zaman damgası içerir
değerlendirildiğine dikkat edin. Zamana dayalı erişim sağlamak için bunu kullanabilirsiniz
Örneğin: yalnızca belirli bir tarihe kadar dosyaların yüklenmesine izin verme,
veya dosyaların yüklendikten sonra bir saate kadar okunmasına izin verebilir.
// Allow a read if the file was created less than one hour ago allow read: if request.time < resource.timeCreated + duration.value(1, 'h');
Birçok işlev, zaman damgaları ve duration.
Kaynak
resource
değişkeni,
Cloud Storage (ör. dosya adı, boyutu, oluşturma zamanı ve
özel meta veriler
Özellikler
name
Dosyanın yolunu da içerecek şekilde dosyanın tam adını içeren bir dize.
// Allow reads if the resource name is "path/to/object" allow read: if resource.name == 'path/to/object'
bucket
Google Cloud Storage'ı içeren bir dize paketinin içinde yer alır.
// Allow reads of all resources in your bucket allow read: if resource.bucket == '<your-cloud-storage-bucket>'
generation
Google Cloud Storage'ı içeren bir int nesne oluşturma seçin. Nesnede sürüm oluşturma için kullanılır.
// Allow reads if the resource matches a known object version allow read: if resource.generation == <known-generation>
metageneration
Google Cloud Storage'ı içeren bir int nesne meta oluşturma dosyası olarak kaydedin. Nesnede sürüm oluşturma için kullanılır.
// Allow reads if the resource matches a known object metadata version allow read: if resource.metageneration == <known-generation>
size
Bayt cinsinden dosya boyutunu içeren bir tamsayı.
// Allow reads if the resource is less than 10 MB allow read: if resource.size < 10 * 1024 * 1024;
timeCreated
Dosyanın ne zaman oluşturulduğunu temsil eden bir zaman damgası.
// Allow reads if the resource was created less than an hour ago allow read: if resource.timeCreated < request.time + duration.value(60, "m")
updated
Dosyanın en son ne zaman güncellendiğini gösteren bir zaman damgası.
// Allow reads if the resource was updated less than an hour ago allow read: if resource.updated < request.time + duration.value(60, "m")
md5Hash
Şu öğenin MD5 karmasını içeren bir dize: dosyası olarak kaydedebilirsiniz.
// Allow writes if the hash of the uploaded file is the same as the existing file allow write: if request.resource.md5Hash == resource.md5Hash;.
crc32c
Şunu içeren bir dize: crc32c hash değeri dosyası olarak kaydedebilirsiniz.
// Allow writes if the hash of the uploaded file is the same as the existing file allow write: if request.resource.crc32c == resource.crc32c;.
etag
Şu öğenin etag'ini içeren bir dize: dosyası olarak kaydedebilirsiniz.
// Allow writes if the etag matches a known object etag allow write: if resource.etag == <known-generation>
contentDisposition
Dosyanın içerik yapısını içeren bir dize.
// Allow reads if the content disposition matches a certain value allow read: if resource.contentDisposition == 'inlined';
contentEncoding
Dosyanın içerik kodlamasını içeren bir dize.
// Allow reads if the content is encoded with gzip allow read: if resource.contentEncoding == 'gzip';
contentLanguage
Dosyanın içerik dilini içeren bir dize.
// Allow reads if the content language is Japanese allow read: if resource.contentLanguage == 'ja';
contentType
Dosyanın içerik türünü içeren bir dize.
// Allow reads if the content type is PNG. allow read: if resource.contentType == 'image/png';
metadata
Geliştirici tarafından sağlanan ek meta verileri içeren bir Map<String, String>
alanları.
// Allow reads if a certain metadata field matches a desired value allow read: if resource.metadata.customProperty == 'customValue';
firestore.get ve firestore.exists
firestore.get()
ve firestore.exists()
işlevleri,
Cloud Firestore içindeki dokümanlardan yararlanabilirsiniz.
Hem firestore.get()
hem de firestore.exists()
işlevleri
tam olarak belirtilen belge yollarını gösterir. Değişkenleri kullanarak
firestore.get()
ve firestore.exists()
için açıkça çıkış yapmanız gerekir
değişkenleri için $(variable)
söz dizimini kullanır.
firestore.get
Bir Cloud Firestore dokümanının içeriğini alın.
service firebase.storage { match /b/{bucket}/o { match /users/{club}/files/{fileId} { allow read: if club in firestore.get(/databases/(default)/documents/users/$(request.auth.uid)).data.memberships } } }
firestore.exists
Bir Cloud Firestore dokümanının mevcut olup olmadığını kontrol edin.
service firebase.storage { match /b/{bucket}/o { match /users/{userId}/photos/{fileId} { allow read: if firestore.exists(/databases/(default)/documents/users/$(userId)/friends/$(request.auth.uid)) } } }
Hizmet
service
, Cloud Storage Security Rules dosyasındaki ilk bildirimdir ve
bu kuralların hangi hizmete uygulanacağını belirtir.
Ad
name
Hizmet kurallarının adı şunlar için geçerli olur: Geçerli tek değer:
firebase.storage
// Specify the service name service firebase.storage { match /b/{bucket}/o { ... } }
Veri Türleri
Rules dili, is
operatörünü kullanarak türü kontrol etmenize olanak tanır.
// For example
a is null
a is string
null
null
veri türü, var olmayan bir değeri temsil ediyor.
allow read: if request.auth != null;
bool
bool
türü, boole true
veya false
değerini temsil eder.
allow read: if true; // always succeeds allow write: if false; // always fails
Karşılaştırma
Boole değerleri, ==
!=
operatörleri kullanılarak karşılaştırılabilir.
Boole İşlemleri
İşlem | İfade |
---|---|
AND |
x && y |
OR |
x || y |
NOT |
!x |
İşlemlerin kısa devresi; true
, false
veya bir
Hata.
allow read: if true || false; // always succeeds, short circuits at true allow write: if false && true; // always fails, short circuits at false
int
ve float
int
ve float
türleri sayıları temsil eder. Int'ler şunlardır: 0
, 1
, -2
vb.
ve kayan noktalar şunlardır: 1.0
, -2.0
, 3.33
vb.
Int'ler imzalı 64 bit değerlerdir, kayan öğeler ise 64 bit IEEE 754 uyumlu değerlerdir.
int
türündeki değerler, karşılaştırmalarda kullanıldığında float
olmaya zorlanır ve
float
değerine sahip aritmetik işlemler.
Karşılaştırma
Tamsayılar ve kayan noktalar, ==
, !=
, >
, <
,
>=
ve <=
operatörleri.
Aritmetik
tamsayılar ve kayan reklam öğeleri eklenebilir, çıkarılabilir, çarpılabilir, bölünebilir, modülo reddedildi:
İşlem | İfade |
---|---|
Ekleme | x + y |
Çıkarma | x - y |
Çarpma | x * y |
Lig | x / y |
Modül | x % y |
Olumsuz | -x |
Matematiksel işlevler
Cloud Storage için Firebase Security Rules, matematik işlemlerinde çeşitli yardımcılar da sağlar aşağıdaki gibi işlevleri kullanabilirsiniz:
İşlev | Açıklama |
---|---|
math.ceil(x) |
Sayısal değerin tavanı |
math.floor(x) |
Sayısal değerin tabanı |
math.round(x) |
Giriş değerini en yakın tam sayıya yuvarlayın |
math.abs(x) |
Girişin mutlak değeri |
math.isInfinite(x) |
Değerin ±∞ olup olmadığını test et, bool döndürüyor |
math.isNaN(x) |
Değerin NaN sayısı olup olmadığını test et, bool döndürüyor |
string
Karşılaştırma
Dizeler, ==
, !=
, >
, <
, >=
ve
<=
operatörleri.
Birleştirme
Dizeler, +
operatörü kullanılarak birleştirilebilir.
// Concatenate a file name and extension 'file' + '.txt'
Dizin ve Aralık
index
operatörü string[]
, karakteri içeren bir dize döndürür
dizede sağlanan dizinde yer alır.
// Allow reads of files that begin with 'a' match /{fileName} { allow read: if fileName[0] == 'a'; }
range
operatörü string[i:j]
,
i
(dahil) ile j
tarihleri arasında, belirtilen dizinler arasındaki karakterler arasında
(hariç). i
veya j
belirtilmezse varsayılan olarak 0 değerini ve
dize, ancak en az i
veya j
belirtilmelidir ancak
.
// Allow reads of files that begin with 'abcdef' match /{fileName} { allow read: if fileName[0:6] == 'abcdef'; }
Sağlanan dizinler varsa index
ve range
operatörleri hata verir
dize sınırlarını aşıyor.
size
Dizedeki karakter sayısını döndürür.
// Allow files with names less than 10 characters match /{fileName} { allow write: if fileName.size() < 10; }
matches
Bir normal ifade eşleşmesi gerçekleştirir, dizetrue
verilen normal ifadedir. Kullanım
Google RE2 söz dizimi.
// Allow writes to files which end in ".txt" match /{fileName} { allow write: if fileName.matches('.*\\.txt') }
split
Bir dizeyi, sağlanan bir normal ifadeye göre böler ve bir list
döndürür.
yardımcı olabilir. Google RE2 söz dizimi kullanılır.
// Allow files named "file.*" to be uploaded match /{fileName} { allow write: if fileName.split('.*\\..*')[0] == 'file' }
path
Yollar, isteğe bağlı kalıp eşleştirmesi olan dizin benzeri adlardır. İlgili içeriği oluşturmak için kullanılan
öne eğik çizgi /
varlığı bir yol segmentinin başlangıcını belirtir.
path
string
bağımsız değişkenini path
biçimine dönüştürür.
// Allow reads on a specific file path match /{allFiles=**} { allow read: if allFiles == path('/path/to/file'); }
timestamp
Zaman damgaları, UTC zaman dilimindedir. Olası değerler 0001-01-01T00.00.00Z itibarıyla başlar ve 9999-12-31T23.59.59Z ile biten.
Karşılaştırma
Zaman damgaları, ==
, !=
, >
, <
, >=
ve kullanılarak karşılaştırılabilir ve sıralanabilir.
<=
operatörleri.
Aritmetik
Zaman damgaları, zaman damgaları ile süreler arasında ekleme ve çıkarmayı destekler. şöyle olur:
İfade | Sonuç |
---|---|
timestamp + duration |
timestamp |
duration + timestamp |
timestamp |
timestamp - duration |
timestamp |
timestamp - timestamp |
duration |
duration + duration |
duration |
duration - duration |
duration |
date
Yalnızca year
, month
ve day
değerlerini içeren timestamp
değeri.
// Allow reads on the same day that the resource was created. allow read: if request.time.date() == resource.timeCreated.date()
year
1 ile 9999 arasında tam sayı olarak yıl değeri.
// Allow reads on all requests made before 2017 allow read: if request.time.year() < 2017
month
1 ile 12 arasında tam sayı olarak ay değeri.
// Allow reads on all requests made during the month of January allow read: if request.time.month() == 1;
day
1 ile 31 arasında ayın tam sayı olarak geçerli günü.
// Allow reads on all requests made during the first day of each month allow read: if request.time.day() == 1;
time
Geçerli saati içeren bir duration
değeri.
// Allow reads on all requests made before 12PM allow read: if request.time.time() < duration.time(12, 0, 0, 0);
hours
0 ile 23 arasında tam sayı olarak saat değeri.
// Allow reads on all requests made before 12PM allow read: if request.time.hours() < 12;
minutes
0 ile 59 arasında tam sayı olarak dakika değeri.
// Allow reads during even minutes of every hour allow read: if request.time.minutes() % 2 == 0;
seconds
0 ile 59 arasında tam sayı olarak saniye değeri.
// Allow reads during the second half of each minute allow read: if request.time.seconds() > 29;
nanos
Tamsayı olarak nano cinsinden kesirli saniye.
// Allow reads during the first 0.1 seconds of each second allow read: if request.time.nanos() < 100000000;
dayOfWeek
1 (Pazartesi) - 7 (Pazar) arası haftanın günü.
// Allow reads on weekdays (Monday to Friday) allow read: if request.time.dayOfWeek() < 6;
dayOfYear
1 ile 366 arasında geçerli yılın günü.
// Allow reads every fourth day allow read: if request.time.dayOfYear() % 4 == 0;
toMillis
Unix döneminden beri geçen geçerli milisaniye sayısını döndürür.
// Allow reads if the request is made before a specified time allow read: if request.time.toMillis() < <milliseconds>;
duration
Süre değerleri, saniye artı kesirli saniye cinsinden gösterilir. nanosaniyedir.
Karşılaştırma
Süreler, ==
, !=
, >
, <
, >=
ve kullanılarak karşılaştırılabilir ve sıralanabilir.
<=
operatörleri.
Aritmetik
Süreler, zaman damgaları ile süreler arasında toplama ve çıkarma işlemini destekler. şöyle olur:
İfade | Sonuç |
---|---|
timestamp + duration |
timestamp |
duration + timestamp |
timestamp |
timestamp - duration |
timestamp |
timestamp - timestamp |
duration |
duration + duration |
duration |
duration - duration |
duration |
seconds
Geçerli süredeki saniye sayısı. -315.576.000.000 arasında olmalıdır ve +315.576.000.000 dahil.
nanos
Geçerli sürenin kesirli saniye sayısı (nanosaniye cinsinden). Zorunluluk -999.999.999 ve +999.999.999 (bu değerler dahil) arasında olmalıdır. Sıfır olmayan saniye ve sıfır olmayan nanonsaniyeler varsa her ikisinin işaretleri de uyumlu olmalıdır.
duration.value
Süreler, duration.value(int magnitude, string units)
kullanılarak oluşturulabilir
fonksiyonunu kullanabilirsiniz.
// All of these durations represent one hour: duration.value(1, "h") duration.value(60, "m") duration.value(3600, "s")
Olası unit
'ler:
Süre | unit |
---|---|
Hafta | w |
Gün | d |
Saat | h |
Dakika | m |
Saniye | s |
Milisaniye | ms |
Nanosaniye | ns |
duration.time
Süreler,
duration.time(int hours, int minutes, int seconds, int nanoseconds)
işlevi,
zaman süresini oluşturan saat, dakika, saniye ve
nanosaniyedir.
// Create a four hour, three minute, two second, one nanosecond duration duration.time(4, 3, 2, 1)
list
Liste, şu türde sıralı bir değer dizisi içerir: null
, bool
,
int
, float
, string
, path
, list
, map
, timestamp
veya duration
.
list
türünde x
ve y
, i
ve int
türünde j
verilir
İçerik üretimi
Liste oluşturmak için köşeli parantezlerin arasına değerler ekleyin:
// Create a list of strings ['apples', 'grapes', 'bananas', 'cheese', 'goats']
Karşılaştırma
Listeler, ==
!=
operatörleri kullanılarak karşılaştırılabilir. İki listenin eşitliği
tüm değerlerin eşit olmasını gerektirir.
Dizin ve Aralık
index
operatörü list[]
,
liste'ye dokunun.
// Allow reads of all files that begin with 'a' match /{fileName} { allow read: if fileName[0] == 'a'; }
range
operatörü list[i:j]
,
i
(dahil) ile j
(hariç) tarihleri arasında belirtilen dizinler. i
veya j
belirtilmemişse varsayılan olarak 0'a ve listenin boyutuna
aralığın geçerli olabilmesi için en az i
veya j
belirtilmelidir.
// Allow reads of all files that begin with 'abcdef' match /{fileName} { allow read: if fileName[0:6] == 'abcdef'; }
in
İstenen değer listede varsa true
değerini, yoksa false
değerini döndürür
gösterir.
// Allow read if a filename has the string 'txt' in it match /{fileName} { allow read: if 'txt' in fileName.split('\\.'); }
join
Dize listesini, belirtilen dizeyle ayrılmış tek bir dizede birleştirir.
// Allow reads if the joined array is 'file.txt' allow read: if ['file', 'txt'].join('.') == 'file.txt';
size
Listedeki öğe sayısı.
// Allow read if there are three items in our list allow read: if ['foo', 'bar', 'baz'].size() == 3;
hasAll
Tüm değerler listede mevcutsa true
değerini döndürür.
// Allow read if one list has all items in the other list allow read: if ['file', 'txt'].hasAll(['file', 'txt']);
map
Bir eşleme, anahtar/değer çiftleri içerir. Anahtarlar dizedir. Değerler ise herhangi bir değer olabilir.
/: null
, bool
, int
, float
, string
, path
, list
, map
,
timestamp
veya duration
.
İçerik üretimi
Bir harita oluşturmak için küme ayraçları arasına anahtar/değer çiftleri ekleyin:
// Create a map of strings to strings { 'mercury': 'mars', 'rain': 'cloud', 'cats': 'dogs', }
Karşılaştırma
Haritalar, ==
!=
operatörleri kullanılarak karşılaştırılabilir. İki haritanın eşitliği
tüm anahtarların her iki eşlemede de mevcut olmasını ve tüm değerlerin eşit olmasını gerektirir.
Dizin
Bir haritadaki değerlere köşeli ayraç veya nokta gösterimi kullanılarak erişilir:
// Access custom metadata properties allow read: if resource.metadata.property == 'property' allow write: if resource.metadata['otherProperty'] == 'otherProperty'
Anahtar mevcut değilse error
döndürülür.
in
İstenen anahtar haritada varsa true
değerini, yoksa false
değerini döndürür
gösterir.
// Allow reads if a property is present in the custom metadata allow read: if property in resource.metadata;
size
Haritadaki anahtar sayısı.
// Allow reads if there's exactly one custom metadata key allow read: if resource.metadata.size() == 1;
keys
Haritadaki tüm tuşların listesi.
// Allow reads if the first metadata key is 'myKey' allow read: if resource.metadata.keys()[0] == 'myKey';
values
Haritadaki tüm değerlerin anahtar sırasına göre listesi.
// Allow reads if the first metadata value is 'myValue' allow read: if resource.metadata.values()[0] == 'myValue';
Hatalar
Hata Değerlendirmesi
Hatalarla karşılaşıldığında Cloud Storage için Firebase Security Rules değerlendirmeye devam eder.
Koşullu &&
ve ||
ifadeleri bir hatayı algılayabileceği için bu faydalıdır
koşul başka bir şekilde false
veya true
değerine kısa devre yaparsa
tıklayın. Örneğin:
İfade | Sonuç |
---|---|
error && true |
error |
error && false |
false |
error || true |
true |
error || false |
error |
Hataların ortaya çıktığı yaygın yerler: sıfıra bölme, değerlere erişim mevcut olmayan bir liste veya harita eklemek ve yanlış türde değerlerin aktarılması işlevine dönüştürdüğümüz anlamına gelir.
// Error if resource.size is zero allow read: if 1000000 / resource.size; // Error, key doesn't exist allow read: if resource.metadata.nonExistentKey == 'value'; // Error, no unit 'y' exists allow read: if request.time < resource.timeCreated + duration.value(1, 'y');