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
okuma işlemi yalnızca istemcinin kimliği "barney" kullanılarak doğrulandığında başarılı olur./users/barney
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"
< (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()"