Cloud Storage Referansı için Firebase Güvenlik Kuralları

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');