Firebase Veritabanı Güvenlik Kuralları API'si

Kural: Türler

.Okumak

Bir istemciye Firebase Gerçek Zamanlı Veritabanı konumuna okuma erişimi verir.

.read kuralı, istemciye Firebase Gerçek Zamanlı Veritabanı konumuna okuma erişimi veren bir Güvenlik Kuralı türüdür. Örneğin:

 ".read": "auth != null && auth.provider == 'twitter'"

.read kuralının değeri, anlaşılırlığı ve doğruluğu artırmak için birkaç davranış değişikliğiyle birlikte JavaScript'in ifade sözdiziminin bir alt kümesi olarak değerlendirilen bir dizedir. Bir konumu okuma izni veren bir .read kuralı, alt öğelerin başarısız olan kendi .read kuralları olsa bile, o konumun alt öğelerinin okunmasına da izin verir.

Bir .read kuralı, newData hariç Firebase Gerçek Zamanlı Veritabanının tüm Kural Değişkenlerine erişebilir.

.yazmak

Bir istemciye Firebase Gerçek Zamanlı Veritabanı konumuna yazma erişimi verir.

.write kuralı, istemciye Firebase Gerçek Zamanlı Veritabanı konumuna yazma erişimi veren bir Güvenlik Kuralı türüdür. Örneğin:

".write": "auth != null && auth.token.isAdmin == true"

.write kuralının değeri, anlaşılırlığı ve doğruluğu artırmak için birkaç davranış değişikliğiyle birlikte JavaScript'in ifade sözdiziminin bir alt kümesi olarak değerlendirilen bir dizedir. Bir konuma yazma izni veren bir .write kuralı, alt öğelerin kendi .write kuralları başarısız olsa bile, o konumun alt öğelerine yazma izni de verir.

Bir .write kuralının, Firebase Gerçek Zamanlı Veritabanının Kural Değişkenlerinin tümüne erişimi vardır.

.doğrula

Bir .write kuralı erişim izni verdiğinde, yazılan verilerin belirli bir şemaya uygun olduğundan emin olmak için kullanılır.

.write kuralı erişim izni verdiğinde, yazılan verilerin belirli bir standarda uygun olduğundan emin olmak için .validate kuralı kullanılır. Erişim izni veren .write ek olarak, bir yazmaya izin verilmeden önce tüm ilgili .validate kurallarının başarılı olması gerekir. Örneğin:

".validate": "newData.hasChildren(['name', 'age'])"

.validate kuralının değeri, anlaşılırlığı ve doğruluğu artırmak için birkaç davranış değişikliğiyle birlikte JavaScript'in ifade sözdiziminin bir alt kümesi olarak değerlendirilen bir dizedir.

Bir .validate kuralının Firebase Realtime Database'in Kural Değişkenlerinin tümüne erişimi vardır.

.indexOn

Firebase Gerçek Zamanlı Veritabanına verilerinizin hangi anahtarların dizine eklenmesini istediğinizi bildirerek sorgu performansını artırır.

.indexOn kuralı, Firebase Gerçek Zamanlı Veritabanı sunucularına, sorgularınızın performansını artırmak için verilerinizdeki belirli anahtarları dizine eklemesini söyler. Örneğin, dinozor verilerinden oluşan bir koleksiyona sahip bir veritabanı verildiğinde, Firebase Realtime Database'e sorgular sunuculardan döndürülmeden önce şu kuralı ekleyerek bunları optimize etmesini söyleyebiliriz:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Güvenlik kılavuzunun verilerinizin indekslenmesi bölümüne bakarak .indexOn kuralı hakkında daha fazla bilgi edinebilirsiniz.

Kural: Değişkenler

yetki

Bir istemcinin kimliği doğrulanmışsa belirteç yükünü içeren bir değişken veya istemcinin kimliği doğrulanmamışsa null .

Firebase Gerçek Zamanlı Veritabanı, çeşitli yerleşik sağlayıcılarda kolayca kimlik doğrulamanıza olanak tanır ve onlar için kimlik doğrulama belirteçleri oluşturur. Bir kullanıcının yerleşik sağlayıcılardan biriyle kimliği doğrulandıktan sonra auth değişkeni aşağıdakileri içerecektir:

Alan Tanım
provider Kullanılan kimlik doğrulama yöntemi (örneğin, "şifre", "anonim", "facebook", "github", "google" veya "twitter").
uid Tüm sağlayıcılarda benzersiz olduğu garanti edilen benzersiz bir kullanıcı kimliği.
token Firebase Auth ID jetonunun içeriği. auth.token bakın.

Örnek olarak, kullanıcı kimliklerini yorumla birlikte sakladıkları sürece kullanıcıların yorum oluşturmasına izin veren aşağıdaki gibi bir kuralımız olabilir:

{
  "rules": {
    ".read": true,
    "$comment": {
      ".write": "!data.exists() && newData.child('user_id').val() == auth.uid"
    }
  }
}

Kullanıcıların Facebook'ta oturum açtıkları sürece yorum oluşturmalarına izin vermek için aşağıdaki gibi bir kural da yapabiliriz:

{
  "rules": {
    ".read": true,
    "$comment": {
      ".write": "!data.exists() && auth.provider == 'facebook'"
    }
  }
}

kimlik doğrulama belirteci

Firebase Auth ID belirtecinin içeriğini içeren bir değişken.

Belirteç aşağıdaki anahtarların bir kısmını veya tamamını içerir:

Alan Tanım
email Varsa, hesapla ilişkili e-posta adresi.
email_verified true Kullanıcı email adresine erişimi olduğunu doğruladıysa. 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, bir proje içinde benzersiz bir durumdur.
firebase.identities Bu kullanıcının hesabıyla ilişkili tüm kimliklerin sözlüğü. Sözlüğün anahtarları aşağıdakilerden herhangi biri olabilir: email , phone , google.com , facebook.com , github.com , twitter.com . Sözlüğün değerleri, hesapla ilişkili her kimlik sağlayıcı için benzersiz tanımlayıcılardan oluşan dizilerdir. Ö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 belirteci 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. örneğin tenant2-m6tyz

Özel kimlik doğrulama kullanılıyorsa auth.token ayrıca geliştirici tarafından belirtilen özel talepleri de içerir.

Bu değerlerin tümü kurallar dahilinde kullanılabilir. Örneğin, bir gmail.com adresiyle ilişkili Google hesaplarına erişimi kısıtlamak için şu kuralı ekleyebiliriz:

{
  "rules": {
    ".read": "auth != null",
    "gmailUsers": {
      "$uid": {
        ".write": "auth.token.email_verified == true && auth.token.email.matches(/.*@gmail.com$/)"
      }
    }
  }
}

Eksiksiz olması açısından auth.token dosyasına aşağıdaki alanlar da dahil edilmiştir, ancak bunların kurallar açısından yararlı olması pek mümkün değildir.

Alan Tanım
iss Tokenı veren kuruluş.
aud Belirteç için seyirci.
auth_time Kullanıcının, jetonu alan cihazı kullanarak bir kimlik bilgisiyle kimlik doğrulamasını yaptığı son sefer.
iat Belirtecin verildiği zaman.
exp Belirtecin süresinin dolduğu zaman.

$konum

Kural yapısında daha önce kullanılmış olan $location anahtarına referans vermek için kullanılabilecek bir değişken.

Kural yapınızda bir $location varsa, okunan veya yazılan asıl çocuğun adını almak için kural ifadenizde eşleşen bir $ değişkenini kullanabilirsiniz. Her kullanıcıya kendi /users/<user> konumuna okuma ve yazma erişimi vermek istediğimizi varsayalım. Şunları kullanabiliriz:

{
  "rules": {
    "users": {
      "$user": {
        ".read": "auth.uid === $user",
        ".write": "auth.uid === $user"
      }
    }
  }
}

Bir istemci /users/barney erişmeye çalıştığında, $user varsayılan konumu $user "barney"e eşit olmasıyla eşleşecektir. Yani .read kuralı auth.uid === 'barney' olup olmadığını kontrol edecektir. Sonuç olarak, /users/barney okumak yalnızca istemcinin kimliğinin "barney" kullanıcı kimliğiyle doğrulanması durumunda başarılı olacaktır.

Şimdi

Firebase Gerçek Zamanlı Veritabanı sunucularına göre Unix döneminden bu yana geçen milisaniye sayısını içerir.

now değişkeni, Firebase Gerçek Zamanlı Veritabanı sunucularına göre UNIX döneminden bu yana geçen milisaniye sayısını içerir. Örneğin, bir kullanıcının created saatin hiçbir zaman gelecekteki bir zamana ayarlanmadığını doğrulamak için bunu kullanabilirsiniz:

{
  "rules": {
    "users": {
      "$user": {
        "created": {
          ".validate": "newData.val() < now"
        }
      }
    }
  }
}

kök

Firebase Gerçek Zamanlı Veritabanınızın kökündeki mevcut verilere karşılık gelen bir RuleDataSnapshot .

Kök değişken size Firebase Gerçek Zamanlı Veritabanınızın kökündeki mevcut verilere karşılık gelen bir RuleDataSnapshot verir. Kural ifadelerinizde veritabanınızdaki herhangi bir veriyi okumak için bunu kullanabilirsiniz. Örneğin, kullanıcıların /comments yalnızca /users/<id>/active true olarak ayarlandığında okumasına izin vermek istiyorsak şunu kullanabiliriz:

{
  "rules": {
    "comments": {
      ".read": "root.child('users').child(auth.uid).child('active').val() == true"
    }
  }
}

Daha sonra, eğer /users/barney/active true değerini içeriyorsa, "barney" kullanıcı kimliğiyle kimliği doğrulanmış bir kullanıcı /comments düğümüne yazabilir.

veri

Geçerli olarak yürütülen kuralın konumundaki Firebase Realtime Database'deki mevcut verilere karşılık gelen bir RuleDataSnapshot .

Veri değişkeni size, o anda yürütülen kuralın veritabanı konumundaki mevcut verilere karşılık gelen bir RuleDataSnapshot verir (size veritabanınızın köküne ilişkin verileri veren kökün aksine).

Örneğin, /users/<user>/public true olarak ayarlanmışsa herhangi bir istemcinin /users/<user> erişimine izin vermek istiyorsanız şunu kullanabilirsiniz:

{
  "rules": {
    "users": {
      "$user": {
        ".read": "data.child('public').val() == true"
      }
    }
  }
}

Veri değişkeni .read , .write ve .validate kurallarında mevcuttur.

yeni veri

Yazmaya izin verilirse ortaya çıkacak verilere karşılık gelen bir RuleDataSnapshot .

.write ve .validate kuralları için, newData değişkeni size, yazmaya izin verilmesi durumunda ortaya çıkacak verilere karşılık gelen bir RuleDataSnapshot verir (bu, mevcut veriler artı yazılmakta olan yeni verilerin "birleştirilmesidir"). Dolayısıyla, her kullanıcının bir adı ve yaşı olduğundan emin olmak istiyorsanız şunu kullanabilirsiniz:

{
  "rules": {
    "users": {
      "$user": {
        ".read": true,
        ".write": true,
        ".validate": "newData.hasChildren(['name', 'age'])"
      }
    }
  }
}

newData mevcut verilerle yeni verileri birleştirdiğinden "kısmi" güncellemeler için bile düzgün davranır. Örneğin:

var fredRef = firebase.database().ref("users/fred");
// Valid since we have a name and age.
fredRef.set({ name: "Fred", age: 19 });
// Valid since we are updating the name but there's already an age.
fredRef.child("age").set(27);
// Invalid since the .validate rule will no longer be true.
fredRef.child("name").remove();

Yeni veri yazılmadığından, newData değişkeni .read kurallarında kullanılamaz. Sadece data kullanmalısınız.

RuleDataSnapshot: Yöntemler

val()

Bu RuleDataSnapshot'tan ilkel değeri ( string , number , boolean veya null ) alır.

Dönüş Değeri : ( String , Number , Boolean , Null ) - Bu RuleDataSnapshot'ın temel değeri.

DataSnapshot.val() dan farklı olarak, alt verileri olan bir RuleDataSnapshot'ta val() öğesinin çağrılması, alt verileri içeren bir nesneyi döndürmez. Bunun yerine özel bir sentinel değeri döndürecektir. Bu, kuralların her zaman son derece verimli bir şekilde çalışabilmesini sağlar.

Sonuç olarak, çocuklara erişmek için her zaman child() kullanmanız gerekir (örneğin data.child('name').val() , data.val().name değil).

Bu örnek yalnızca isReadable alt öğesinin okunmakta olan konumda true olarak ayarlanması durumunda okumaya izin verir.

".read": "data.child('isReadable').val() == true"

çocuk()

Belirtilen göreli yoldaki konum için bir RuleDataSnapshot alır.

Bağımsız Değişkenler : childPath String - Alt verilerin konumuna ilişkin göreceli yol.

Dönüş Değeri : RuleDataSnapshot - Alt konum için RuleDataSnapshot .

Göreli yol ya basit bir alt isim (örneğin 'fred') ya da eğik çizgiyle ayrılmış daha derin bir yol (örneğin 'fred/isim/ilk') olabilir. Alt konumun verisi yoksa boş bir RuleDataSnapshot döndürülür.

Bu örnek yalnızca isReadable alt öğesinin okunmakta olan konumda true olarak ayarlanması durumunda okumaya izin verir.

".read": "data.child('isReadable').val() == true"

ebeveyn()

Üst konum için bir RuleDataSnapshot alır.

Dönüş Değeri : RuleDataSnapshot - Üst konum için RuleDataSnapshot .

Bu örnek, Firebase Gerçek Zamanlı Veritabanınızın köküne başvuruyorsa, ebeveyni yoktur ve parent() başarısız olur ve mevcut kural ifadesinin atlanmasına neden olur (hata olarak).

Bu örnek yalnızca isReadable kardeşinin true olarak ayarlanması durumunda okumaya izin verir.

".read": "data.parent().child('isReadable').val() == true"

hasChild(childPath)

Belirtilen alt öğe mevcutsa true değerini döndürür.

Bağımsız Değişkenler : childPath String - Potansiyel bir alt öğenin konumuna ilişkin göreceli yol.

Dönüş Değeri : Boolean - belirtilen alt yolda veri mevcutsa true ; aksi takdirde false .

Bu örnek, yalnızca bir alt "ad" içeriyorsa verilerin yazılmasına izin verir.

".validate": "newData.hasChild('name')"

hasChildren([çocuklar])

Çocukların varlığını kontrol eder.

Bağımsız Değişkenler : children Array isteğe bağlı - Tümünün mevcut olması gereken bir dizi alt anahtar.

Dönüş Değeri : Boolean - (belirtilen) alt öğeler mevcutsa true ; aksi takdirde false .

Hiçbir bağımsız değişken sağlanmazsa, RuleDataSnapshot'ın herhangi bir alt öğesi varsa doğru değerini döndürür. Bir dizi alt ad sağlanırsa, yalnızca belirtilen alt öğelerin tümü RuleDataSnapshot'ta mevcutsa true değerini döndürür.

Bu örnek yalnızca bir veya daha fazla alt öğe içeriyorsa verilerin yazılmasına izin verir.

".validate": "newData.hasChildren()"

Bu örnek, yalnızca "isim" ve "yaş" alt öğelerini içeriyorsa verilerin yazılmasına izin verir.

".validate": "newData.hasChildren(['name', 'age'])"

var()

Bu RuleDataSnapshot herhangi bir veri içeriyorsa true değerini döndürür.

Dönüş Değeri : Boolean - RuleDataSnapshot herhangi bir veri içeriyorsa true ; aksi takdirde false .

Bu RuleDataSnapshot herhangi bir veri içeriyorsa, mevcut işlevi true değerini döndürür. data.exists() data.val() != null ile eşdeğer olduğundan, bu tamamen kolaylık sağlayan bir işlevdir.

Bu örnek, mevcut veri olmadığı sürece bu konumda yazmaya izin verir.

".write": "!data.exists()"

getPriority()

RuleDataSnapshot içindeki verilerin önceliğini alır.

Dönüş Değeri : ( String , Number , Null ) - Bu RuleDataSnapshot'taki verilerin önceliği.

Bu örnek, yazılan yeni verinin önceliğe sahip olmasını sağlar

".validate": "newData.getPriority() != null"

numara()

Bu RuleDataSnapshot sayısal bir değer içeriyorsa true değerini döndürür.

Dönüş Değeri : Boolean - veri sayısalsa true ; aksi takdirde false .

Bu örnek, yazılmakta olan yeni verinin sayısal bir değere sahip alt "yaş"a sahip olmasını sağlar.

".validate": "newData.child('age').isNumber()"

isString()

Bu RuleDataSnapshot bir dize değeri içeriyorsa true değerini döndürür.

Dönüş Değeri : Veri bir String ise Boolean - true ; aksi takdirde false .

Bu örnek, yazılmakta olan yeni verinin dize değeri olan alt "ad"a sahip olmasını sağlar.

".validate": "newData.child('name').isString()

isBoolean()

Bu RuleDataSnapshot bir boole değeri içeriyorsa true değerini döndürür.

Dönüş Değeri : Boolean - eğer veri bir Boolean ise true ; aksi takdirde false .

Bu örnek, yazılmakta olan yeni verinin boole değeri olan "aktif" bir alt öğeye sahip olmasını sağlar.

".validate": "newData.child('active').isBoolean()"

Dize: Özellikler

uzunluk

Dizenin uzunluğunu döndürür.

Dönüş Değeri : Number - Dizedeki karakter sayısı.

Bu örnek, dizenin en az 10 karakter olmasını gerektirir.

".validate": "newData.isString() && newData.val().length >= 10"

Dize: Yöntemler

içerir(alt dize)

Dize belirtilen alt dizeyi içeriyorsa true değerini döndürür.

Bağımsız Değişkenler : substring String - Aranacak bir alt dize.

Dönüş Değeri : Boolean - dize belirtilen alt dizeyi içeriyorsa true ; aksi takdirde false .

Bu örnek, verilerin "@" içeren bir dize olmasını gerektirir.

".validate": "newData.isString() && newData.val().contains('@')"

başlarŞununla(alt dize)

Dize belirtilen alt dizeyle başlıyorsa true değerini döndürür.

Bağımsız Değişkenler : substring String - Başlangıçta aranacak bir alt dize.

Dönüş Değeri : Boolean - dize belirtilen alt dizeyi içeriyorsa true ; aksi takdirde false .

Bu örnek, auth.token.identifier "internal-" ile başlaması durumunda okuma erişimine izin verir

".read": "auth.token.identifier.beginsWith('internal-')"

biterWith(alt dize)

Dize belirtilen alt dizeyle bitiyorsa true değerini döndürür.

Bağımsız Değişkenler : substring String - Sonunda aranacak bir alt dize.

Dönüş Değeri : Boolean - dize belirtilen alt dizeyle bitiyorsa true ; aksi takdirde false .

Bu örnek, auth.token.identifier "@company.com" ile bitmesi durumunda okuma erişimine izin verir

".read": "auth.token.identifier.endsWith('@company.com')"

değiştir(alt dize, değiştirme)

Belirtilen alt dizenin tüm örneklerinin belirtilen değiştirme dizesiyle değiştirildiği dizenin bir kopyasını döndürür.

Bağımsız Değişkenler : substring String - Aranacak bir alt dize. replacement String - Alt dizenin değiştirileceği dize.

Dönüş Değeri : String - Alt dizeyi değiştirmeyle değiştirdikten sonraki yeni dize.

replace() yöntemi, belirtilen alt dizenin tüm örneklerini yalnızca ilk örneğiyle değil, belirtilen değiştirme dizesiyle değiştirmesi bakımından JavaScript replace() yönteminden biraz farklıdır.

Anahtarlarda noktalara izin verilmediğinden, dizeleri saklamadan önce noktalı dizelerden kaçmamız gerekir. Bunun bir örneği e-posta adresleri olabilir. /whitelist/ düğümümüzde beyaz listeye alınmış e-posta adreslerinin bir listesinin bulunduğunu varsayalım:

{
 "user": {
   "$uid": {
     "email": <email>
   }
 },
 "whitelist": {
   "fred@gmail%2Ecom": true,
   "barney@aol%2Ecom": true
 }
}

Yalnızca e-postaları /whitelist/ düğümündeyse kullanıcıların eklenmesine izin veren bir kural oluşturabiliriz:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "true",
        ".write": "root.child('whitelist').child(newData.child('email').val().replace('.', '%2E')).exists()"
      }
    }
  }
}

toLowerCase()

Küçük harfe dönüştürülmüş dizenin bir kopyasını döndürür.

Dönüş Değeri : String - Küçük harfe dönüştürülen dize.

Bu örnek, auth.token.identifier tüm küçük harflerin /users altında mevcut olması durumunda okuma erişimine izin verir.

".read": "root.child('users').child(auth.token.identifier.toLowerCase()).exists()"

toUpperCase()

Büyük harfe dönüştürülmüş dizenin bir kopyasını döndürür.

Dönüş Değeri : String - Büyük harfe dönüştürülen dize.

Bu örnek, auth.token.identifier tamamı büyük harf olarak /users altında mevcut olması durumunda okuma erişimine izin verir.

".read": "root.child('users').child(auth.token.identifier.toUpperCase()).exists()"

eşleşmeler(regex)

Dize belirtilen normal ifade değişmez değeriyle eşleşiyorsa true değerini döndürür.

Dönüş Değeri : Boolean - dize normal ifade değişmezi, regex ile eşleşiyorsa true ; aksi takdirde false .

Tüm kural regex belgelerine bakın.

Operatörler

+ (ekle)

Değişken eklemek veya dize birleştirme için kullanılır.

Aşağıdaki örnek, yeni değerin mevcut değeri tam olarak bir birim artırmasını sağlar. Bu, bir sayacı uygulamak için kullanışlıdır:

".write": "newData.val() === data.val() + 1"
".validate": "root.child('room_names/' + $room_id).exists()"

- (inkar et veya çıkar)

Bir kural ifadesinde bir değeri olumsuzlamak veya iki değeri çıkarmak için kullanılır.

Bu doğrulama kuralı, yeni değerin konumdaki alt değerin tersi olup olmadığını kontrol eder:

".validate": "newData.val() === -(data.child('quantity').val())"

Aşağıdaki örnekte yalnızca son on dakikadaki mesajların okunabilmesini sağlamak için çıkarma işlemi kullanılmaktadır:

".read": "newData.child('timestamp').val() > (now - 600000)"

* (çarpmak)

Bir kural ifadesindeki değişkenleri çarpmak için kullanılır.

Bu doğrulama kuralı, yeni değerin fiyat ve miktarın (mevcut iki değer) çarpımına eşit olup olmadığını kontrol eder:

".validate": "newData.val() === data.child('price').val() * data.child('quantity').val()"

/ (bölmek)

Bir kural ifadesindeki değişkenleri bölmek için kullanılır.

Aşağıdaki örnekte doğrulama kuralı, depolanan verilerin başka bir yerde depolanan toplam verilerin ortalaması olmasını sağlar:

".validate": "newData.val() === data.parent().child('sum').val() / data.parent().child('numItems').val()"

% (modül)

Kural ifadesinde bir değişkeni diğerine bölmenin kalanını bulmak için kullanılır.

Bu kural yalnızca çift sayıların yazılabileceğini doğrular:

".validate": "newData.val() % 2 === 0"

=== (eşittir)

Bir kural ifadesindeki iki değişkenin aynı tür ve değere sahip olup olmadığını kontrol etmek için kullanılır.

Aşağıdaki kural, yalnızca kullanıcı hesabının sahibine yazma erişimi vermek için === operatörünü kullanır. Kuralın true olarak değerlendirilmesi için kullanıcının kullanıcı kimliğinin anahtarla ( $user_id ) tam olarak eşleşmesi gerekir.

"users": {
  ".write": "$user_id === auth.uid"
}

!== (eşit değil)

Bir kural ifadesindeki iki değişkenin eşit olup olmadığını kontrol etmek için kullanılır.

Aşağıdaki okuma kuralı yalnızca oturum açmış kullanıcıların verileri okuyabilmesini sağlar:

".read": "auth !== null"

&& (VE)

Her iki işlenen de doğruysa doğru olarak değerlendirilir. Bir kural ifadesinde birden çok koşulu değerlendirmek için kullanılır.

Aşağıdaki doğrulama kuralı, yeni verilerin 100 karakterden kısa bir dize olup olmadığını kontrol eder:

".validate": "newData.isString() && newData.val().length < 100"

|| (VEYA)

Kural ifadesindeki bir işlenen doğruysa doğru olarak değerlendirilir.

Bu örnekte eski veri veya yeni veri olmadığı sürece yazabiliriz. Başka bir deyişle, veri siliyor veya oluşturuyorsak ancak veriyi güncellemiyorsak yazabiliriz.

".write": "!data.exists() || !newData.exists()"

! (OLUMSUZ)

Tek işleneni yanlışsa doğru olarak değerlendirilir. Kural ifadelerinde, ! operatörü genellikle verinin bir konuma yazılıp yazılmadığını görmek için kullanılır.

Aşağıdaki kural yalnızca belirtilen konumda veri yoksa yazma erişimine izin verir:

".write": "!data.exists()"

> (büyüktür)

Kural ifadesinde bir değerin başka bir değerden büyük olup olmadığını kontrol etmek için kullanılır.

Bu doğrulama kuralı, yazılan dizenin boş bir dize olmadığını kontrol eder:

".validate": "newData.isString() && newData.val().length > 0"

< (daha az)

Kural ifadesinde bir değerin başka bir değerden küçük olup olmadığını kontrol etmek için kullanılır.

Bu doğrulama kuralı, bir dizenin 20 karakterden az olup olmadığını kontrol eder:

".validate": "newData.isString() && newData.val().length < 20"

>= (büyük veya eşit)

Kural ifadesinde bir değerin başka bir değerden büyük veya ona eşit olup olmadığını kontrol etmek için kullanılır.

Bu doğrulama kuralı, yazılan dizenin boş bir dize olmadığını kontrol eder:

".validate": "newData.isString() && newData.val().length >= 1"

<= (küçük veya eşit)

Kural ifadesinde bir değerin başka bir değerden küçük veya ona eşit olup olmadığını kontrol etmek için kullanılır.

Bu doğrulama kuralı, gelecekte yeni verilerin eklenememesini sağlar:

".validate": "newData.val() <= now"

? (üçlü operatör)

Koşullu kural ifadesini değerlendirmek için kullanılır.

Üçlü operatör üç işlenen alır. ?'den önceki işlenen ? durumdur. Koşul doğru olarak değerlendirilirse ikinci işlenen değerlendirilir. Koşul yanlışsa üçüncü işlenen değerlendirilir.

Aşağıdaki doğrulama kuralı için yeni değer bir sayı veya bir boole olabilir. Eğer bir sayı ise 0'dan büyük olmalıdır.

".validate": "newData.isNumber() ? newData.val() > 0 : newData.isBoolean()"