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,
okumak yalnızca istemcinin kimliğinin "barney" kullanıcı kimliğiyle doğrulanması durumunda başarılı olacaktır./users/barney
Ş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()"