Firebase Database Security Rules API'si

Kural: Türler

oku

Bir istemciye Firebase Realtime Database konumuna okuma erişimi verir.

.read kuralı, istemciye Firebase Realtime Database 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, netliği ve doğruluğu artırmak için birkaç davranış değişikliğine sahip JavaScript ifade söz diziminin bir alt kümesi olarak değerlendirilen bir dizedir. Bir konumu okuma izni veren .read kuralı, alt öğelerin kendi .read kurallarına sahip olup başarısız olsa bile bu konumun tüm alt öğelerinin okunmasına da izin verir.

.read kuralı, newData hariç tüm Firebase Realtime Database'in Kural Değişkenleri'ne erişebilir.

.yazma

İstemcilere Firebase Realtime Database konumuna yazma erişimi verir.

.write kuralı, istemciye Firebase Realtime Database 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, netliği ve doğruluğu artırmak için birkaç davranış değişikliğine sahip JavaScript ifade söz diziminin bir alt kümesi olarak değerlendirilen bir dizedir. Bir konuma yazma izni veren .write kuralı, alt öğelerin kendi .write kurallarına sahip olup başarısız olsa bile bu konumun tüm alt öğelerine yazmaya da izin verir.

.write kuralı, tüm Firebase Realtime Database'in Kural Değişkenleri'ne erişebilir.

.verify

Bir .write kuralı erişim izni verdikten sonra, yazılan verilerin belirli bir şemaya uygun olmasını sağlamak için kullanılır.

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

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

.validate kuralının değeri, netliği ve doğruluğu artırmak için birkaç davranış değişikliğine sahip JavaScript ifade söz diziminin bir alt kümesi olarak değerlendirilen bir dizedir.

.validate kuralı, tüm Firebase Realtime Database'in Kural Değişkenleri'ne erişebilir.

.indexOn

Firebase Realtime Database'e verilerinizin dizine eklenmesini istediğiniz anahtarları bildirerek sorgu performansını iyileştirir.

.indexOn kuralı, sorgularınızın performansını artırmak için Firebase Realtime Database sunucularına verilerinizdeki belirli anahtarları dizine eklemelerini söyler. Örneğin, dinozor verileri koleksiyonuna sahip bir veritabanı varsa, şu kuralı ekleyerek Firebase Realtime Database'e sorgular için optimizasyon yapmasını söyleyebiliriz: Bu kural, sunuculardan döndürülmeden önce sorgular için optimize edilir:

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

Güvenlik rehberinin verilerinizi dizine ekleme ile ilgili bölümüne bakarak .indexOn kuralı hakkında daha fazla bilgi edinebilirsiniz.

Kural: Değişkenler

auth

İstemci kimliği doğrulanmışsa jeton yükünü içeren değişken veya null istemcinin kimliği doğrulanmamışsa

Firebase Realtime Database, birçok yerleşik sağlayıcıda kolayca kimlik doğrulamanıza olanak tanır ve bu sağlayıcılar için yetkilendirme jetonları oluşturur. Bir kullanıcının yerleşik sağlayıcılardan biriyle kimliği doğrulandıktan sonra kimlik doğrulama değişkeni şunları içerir:

Alan Açıklama
provider Kullanılan kimlik doğrulama yöntemi (ör. "şifre", "anonim", "facebook", "github", "google" veya "twitter").
uid Tüm sağlayıcılar arasında benzersiz olduğu garanti edilen benzersiz kullanıcı kimliği.
token Firebase Kimlik Doğrulama Kimliği jetonunun içeriği. auth.token başlıklı makaleyi inceleyin.

Örneğin, kullanıcı kimliklerini yorumla birlikte sakladıkları sürece yorum oluşturmalarına izin veren aşağıdaki gibi bir kuralımızı kullanabiliriz:

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

Ayrıca, kullanıcıların Facebook ile oturum açmış olmaları koşuluyla yorum oluşturmalarına izin vermek için aşağıdaki gibi bir kural da oluşturabiliriz:

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

auth.token

Firebase Kimlik Doğrulama Kimliği jetonunun içeriğini içeren bir değişken.

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

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 auth.token, özel kimlik doğrulamaları da hak talepleri için geçerlidir.

Bu değerlerin tümü kurallar dahilinde kullanılabilir. Örneğin, gmail.com adresiyle ilişkilendirilmiş 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$/)"
      }
    }
  }
}

Bütünlük açısından, aşağıdaki alanlar da auth.token içine dahil edilir ancak büyük olasılıkla kurallarda yararlı olmazlar.

Alan Açıklama
iss Jetonu veren kuruluş.
aud Jetonun kitlesi.
auth_time Kullanıcının, jetonu alan cihazı kullanarak bir kimlik bilgisiyle en son gerçekleştirdiği zaman.
iat Jetonun oluşturulduğu saat.
exp Jetonun süresinin dolacağı saat.

$location

Daha önce bir kural yapısında kullanılan $location anahtarına referans vermek için kullanılabilecek değişken.

Kural yapınızda $location olduğunda, okunan veya yazılan alt öğenin adını almak için kural ifadenizde eşleşen bir $ değişkeni kullanabilirsiniz. Her kullanıcıya kendi /users/<user> konumu için 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 hizmetine erişmeye çalıştığında $user varsayılan konumu $user ile "barney" olacak şekilde eşleşir. Dolayısıyla .read kuralı, auth.uid === 'barney' olup olmadığını kontrol eder. Sonuç olarak /users/barney okuma işlemi yalnızca istemcinin kimliği "barney" kullanılarak doğrulandığında başarılı olur.

katılın

Firebase Realtime Database sunucularına göre Unix döneminden bu yana geçen milisaniye sayısını içerir.

now değişkeni, Firebase Realtime Database 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 saatinin 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 Realtime Database'inizin kök kısmındaki mevcut verilere karşılık gelen RuleDataSnapshot.

Kök değişken, size Firebase Realtime Database'inizin kökünde bulunan mevcut verilere karşılık gelen bir RuleDataSnapshot verir. Bunu, kural ifadelerinizde veritabanınızdaki tüm verileri okumak için kullanabilirsiniz. Örneğin kullanıcıların /comments okumasına izin vermek için /users/<id>/active politikasının doğru değerine ayarlanması halinde şunu kullanabiliriz:

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

Ardından, /users/barney/active doğru değerini içeriyorsa bir kullanıcı "barney" kullanıcı adıyla kimlik doğrulaması yapmıştır. /comments düğümüne yazabilir.

veri

Şu anda yürütülen kuralın bulunduğu konumdaki Firebase Realtime Database'de mevcut verilere karşılık gelen RuleDataSnapshot.

Veri değişkeni size, çalıştırılan kuralın veritabanı konumundaki mevcut verilere karşılık gelen bir RuleDataSnapshot verir (kökten farklı olarak, veritabanınızın kökü için veri sağlar).

Örneğin, /users/<user>/public doğru olarak ayarlandıysa 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 kural.

yeniVeriler

Yazmaya izin verilirse sonuçlanacak verilere karşılık gelen RuleDataSnapshot.

.write ve .validate kuralları için newData değişkeni, yazmaya izin verildiğinde ortaya çıkacak verilere karşılık gelen bir RuleDataSnapshot sağlar (bu, mevcut veriler ile yazılan yeni verilerin "birleştirilmesidir"). Her kullanıcının bir adı ve yaşı olmasını sağlamak istiyorsanız şunu kullanabilirsiniz:

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

newData mevcut verileri ve yeni verileri birleştirdiğinden, "kısmi" anahtar kelimeler için bile güncellemelerine göz atın. Ö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ığı için newData değişkeni .read kurallarında kullanılamaz. Yalnızca verileri kullanmanız gerekir.

RuleDataSnapshot: Yöntemler

val()

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

Döndürme Değeri: (String, Number, Boolean, Null) - Bu RuleDataSnapshot temel değeri.

DataSnapshot.val() işlevinin aksine, alt verileri olan bir RuleDataSnapshot'ta val() çağrısı yapıldığında alt öğeler içeren bir nesne döndürülmez. Bunun yerine özel bir koruyucu değeri döndürür. Bu, kuralların her zaman son derece verimli bir şekilde çalışmasını sağlar.

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

Bu örnekte yalnızca isReadable alt öğesi, okunmakta olan konumda doğru değerine ayarlanmışsa okumaya izin verir.

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

alt()

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

Bağımsız değişkenler: childPath String - Alt verilerin konumunun göreli bir yoludur.

Döndürme Değeri: RuleDataSnapshot - Alt konuma ait RuleDataSnapshot.

Göreli yol, basit bir alt ad (ör. "fred") veya eğik çizgiyle ayrılmış daha derin bir yol (ör. "fred/ad/first") olabilir. Alt konumda veri yoksa boş bir RuleDataSnapshot döndürülür.

Bu örnekte yalnızca isReadable alt öğesi, okunmakta olan konumda doğru değerine ayarlanmışsa okumaya izin verir.

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

üst()

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

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

Bu örnek, Firebase Realtime Database'inizin köküne işaret ediyorsa üst öğesi yoktur ve parent() başarısız olur. Bu durumda, mevcut kural ifadesi atlanır (hata olarak).

Bu örnekte yalnızca isReadable eşdüzey öğe doğru değerine ayarlanmışsa okumaya izin verir.

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

hasChild(childPath)

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

Bağımsız değişkenler: childPath String - Potansiyel bir alt öğenin konumunun göreli bir yoludur.

Döndürülen Değeri: Boole - Belirtilen alt yolda veri varsa true; aksi takdirde false.

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

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

hasChildren([çocuklar])

Çocukların olup olmadığını kontrol eder.

Bağımsız değişkenler: children Array isteğe bağlı - Hepsinin mevcut olması gereken bir alt anahtar dizisi.

Döndürme Değeri: (belirtilen) alt öğeler varsa Boolean - true; başka false.

Herhangi bir bağımsız değişken sağlanmazsa, RuleDataSnapshot alt öğesi varsa doğru döndürülür. Bir alt ad dizisi sağlanırsa yalnızca belirtilen alt öğelerin tümü RuleDataSnapshot içinde yer alıyorsa 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 "name" değerini içeriyorsa verilerin yazılmasına izin verir. ve "yaş"

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

var()

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

Döndürme Değeri: RuleDataSnapshot herhangi bir veri içeriyorsa Boolean - true; başka false.

Bu RuleDataSnapshot veri içeriyorsa var işlevi true değerini döndürür. data.exists(), data.val() != null ile eşdeğer olduğundan bu yalnızca kolaylık işlevidir.

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

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

getPriority()

RuleDataSnapshot'da verilerin önceliğini alır.

Döndürme Değeri: (String, Number, Null) - Bu RuleDataSnapshot'daki verilerin önceliği.

Bu örnek, yazılan yeni verilerin bir öncelik olmasını sağlar.

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

isNumber()

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

Döndürülen Değeri: Veriler sayısalsa Boolean - true; başka false.

Bu örnek, yazılan yeni verinin "yaş" alt öğesi olmasını sağlar. benzersiz bir kod temsil eder.

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

isString()

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

Döndürülen Değeri: Veriler String ise Boolean - true; başka false.

Bu örnek, yazılan yeni verinin "name" alt öğesine sahip olmasını sağlar. kullanabilirsiniz.

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

isBoole()

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

Döndürülen Değeri: Veriler Boolean ise Boolean - true; başka false.

Bu örnek, yazılan yeni verinin "etkin" alt öğesine sahip olmasını sağlar. bir boole değeri olacaktır.

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

Dize: Özellikler

uzunluk

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

Döndürülen Değeri: Number - Dizedeki karakter sayısı.

Bu örnek, dizenin en az 10 karakter uzunluğunda 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 alt dize.

Döndürme Değeri: Dize, belirtilen alt dizeyi içeriyorsa Boolean - true; başka false.

Bu örnekte, verilerin "@" içeren bir dize olması gerekir.

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

StartWith(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şta aranacak bir alt dize.

Döndürme Değeri: Dize, belirtilen alt dizeyi içeriyorsa Boolean - true; başka false.

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

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

EndpointsWith(alt dize)

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

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

Döndürme Değeri: Dize, belirtilen alt dizeyle bitiyorsa Boolean - true; başka false.

Bu örnekte, auth.token.identifier "@sirket.com" ile bitiyorsa okuma erişimine izin verilir

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

değiştirme(alt dize; değiştirme)

Dizenin, belirtilen bir alt dizenin tüm örnekleriyle birlikte belirtilen değiştirme dizesiyle değiştirilmiş bir kopyasını döndürür.

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

Döndürme Değeri: String - Alt dize, değiştirme işleviyle değiştirildikten sonra gösterilen yeni dize.

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

Anahtarlarda nokta kullanılmasına izin verilmediğinden, dizeleri depolamadan önce nokta kullanarak çıkış yapmamız gerekir. E-posta adresleri buna örnek olarak verilebilir. /whitelist/ düğümümüzde beyaz listeye eklenmiş e-posta adreslerinin bir listesinimizin olduğunu varsayalım:

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

Yalnızca e-postaları /whitelist/ düğümünde olan 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()

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

Döndürülen Değeri: String - Dize, küçük harfe dönüştürülmüştür.

Bu örnekte, tümü küçük harf /users altında mevcut olduğundan auth.token.identifier, okuma erişimine izin verir.

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

toUpperCase()

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

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

Bu örnekte, tamamı büyük harf /users altında olduğu için auth.token.identifier değerine okuma erişimi verilmesine izin verir.

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

eşleşir(regex)

Dize, belirtilen düz ifade ile eşleşirse true değerini döndürür.

Döndürme Değeri: Boolean - true, dize normal ifade normal ifadesiyle, normal ifadeyle eşleşirse; başka false.

Kural normal ifade dokümanlarının tamamına bakın.

Operatörler

+ (ekle)

Değişken eklemek veya dizeleri birleştirmek için kullanılır.

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

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

- (hariç tutun veya çıkarın)

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 bir alt değerin tersi olup olmadığını kontrol eder:

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

Aşağıdaki örnekte yalnızca son on dakika içindeki iletilerin okunabilmesi için çıkarma işlemi kullanılmıştır:

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

* (çarpma)

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

Bu doğrulama kuralı, yeni değerin fiyat ve miktarın ürününe (iki mevcut değer) eşit olup olmadığını kontrol eder:

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

/ (böl)

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 verinin 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ölüp kalan kısmı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 doğru olarak değerlendirilmesi için kullanıcının UID'si, anahtarla ($user_id) tam olarak eşleşmelidir.

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

!== (eşit değildir)

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

Aşağıdaki okuma kuralı, verileri yalnızca giriş yapmış kullanıcıların okuyabilmesini sağlar:

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

&& (VE)

Her iki işlenen de doğruysa doğru olarak değerlendirilir. Bir kural ifadesinde birden fazla 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 işlenenlerden biri doğruysa doğru olarak değerlendirilir.

Bu örnekte, eski veriler veya yeni veriler mevcut olmadığı sürece yazabiliriz. Başka bir deyişle, verileri siliyor veya oluşturuyor ancak verileri güncellemiyorsak bunu yazabiliriz.

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

! (DEĞİL)

Tek işleneni yanlışsa doğru olarak değerlendirilir. Kural ifadelerinde ! operatörü genellikle verilerin 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)

Bir değerin, kural ifadesindeki 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 olup olmadığını kontrol eder:

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

&lt; (küçüktür)

Bir kural ifadesindeki 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 kısa olup olmadığını kontrol eder:

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

>= (büyüktür veya eşittir)

Bir değerin, kural ifadesindeki başka bir değerden büyük veya bu değere eşit olup olmadığını kontrol etmek için kullanılır.

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

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

<= (küçüktür veya eşittir)

Bir değerin, kural ifadesindeki 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"

ne yapmalıyım? (üçlü operatör)

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

Üçlü operatör üç işlenen alır. ? karakterinden önceki işlenen koşuldur. 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 boole olabilir. Bu bir sayıysa 0'dan büyük olmalıdır.

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