Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Güvenlik Kuralları nasıl çalışır?

Güvenlik, uygulama geliştirme bulmacasının en karmaşık parçalarından biri olabilir. Çoğu uygulamada, geliştiricilerin kimlik doğrulamasını (kullanıcı kim olduğunu) ve yetkilendirmeyi (bir kullanıcının yapabileceklerini) işleyen bir sunucu oluşturması ve çalıştırması gerekir.

Firebase Güvenlik Kuralları, orta (sunucu) katmanı kaldırır ve verilerinize doğrudan bağlanan istemciler için yola dayalı izinler belirlemenize olanak tanır. Kuralların gelen isteklere nasıl uygulandığı hakkında daha fazla bilgi edinmek için bu kılavuzu kullanın.

Kuralları hakkında daha fazla bilgi edinmek için bir ürün seçin.

Cloud Firestore

Basit yapı

Cloud Firestore ve Cloud Storage'daki Firebase Güvenlik Kuralları, aşağıdaki yapı ve sözdizimini kullanır:

service <<name>> {
  // Match the resource path.
  match <<path>> {
    // Allow the request if the following conditions are true.
    allow <<methods>> : if <<condition>>
  }
}

Kuralları oluştururken aşağıdaki temel kavramları anlamak önemlidir:

  • İstek: allow deyiminde çağrılan yöntem veya yöntemler. Bunlar, çalıştırılmasına izin verdiğiniz yöntemlerdir. Standart yöntemler şunlardır: get , list , create , update ve delete . read ve write kolaylığı yöntemleri, belirtilen veritabanı veya depolama yolunda geniş okuma ve yazma erişimi sağlar.
  • Yol: URI yolu olarak gösterilen veritabanı veya depolama konumu.
  • Kural: Bir isteğe doğru olarak değerlendirildiğinde izin veren bir koşul içeren allow ifadesi.

Güvenlik kuralları sürüm 2

Mayıs 2019 itibarıyla Firebase güvenlik kurallarının 2. sürümü kullanıma sunulmuştur. Kuralların Sürüm 2'si özyinelemeli joker karakterlerin davranışını değiştirir {name=**} . Koleksiyon grubu sorgularını kullanmayı planlıyorsanız, sürüm 2'yi kullanmanız gerekir. rules_version = '2'; yaparak sürüm 2'ye dahil rules_version = '2'; güvenlik kurallarınızdaki ilk satır:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

Eşleşen yollar

Tüm eşleşme ifadeleri koleksiyonları değil belgeleri göstermelidir. Bir maç ifadesi, match /cities/SF olduğu gibi belirli bir belgeyi işaret edebilir veya match /cities/{city} gibi belirtilen yoldaki herhangi bir belgeyi işaret etmek için joker karakterler kullanabilir.

Yukarıdaki örnekte, match deyimi {city} joker karakter sözdizimini kullanır. Bu, kuralın /cities/SF veya /cities/NYC gibi cities koleksiyonundaki herhangi bir belge için geçerli olduğu anlamına gelir. Maç ifadesindeki allow ifadeleri değerlendirildiğinde, city değişkeni SF veya NYC gibi şehir belge adına çözümlenir.

Eşleşen alt koleksiyonlar

Cloud Firestore'daki veriler, belge koleksiyonları halinde düzenlenir ve her belge, hiyerarşiyi alt koleksiyonlarla genişletebilir. Güvenlik kurallarının hiyerarşik verilerle nasıl etkileşime girdiğini anlamak önemlidir.

cities koleksiyonundaki her belgenin bir yer landmarks alt koleksiyonu içerdiği durumu düşünün. Güvenlik kuralları yalnızca eşleşen yolda geçerlidir, bu nedenle cities koleksiyonunda tanımlanan erişim kontrolleri yer landmarks alt koleksiyonuna uygulanmaz. Bunun yerine, alt koleksiyonlara erişimi kontrol etmek için açık kurallar yazın:

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      allow read, write: if <condition>;

        // Explicitly define rules for the 'landmarks' subcollection
        match /landmarks/{landmark} {
          allow read, write: if <condition>;
        }
    }
  }
}

Yuva yaparken match ifadeleri, iç yolu match deyimi daima dış yoluna akrabası match açıklamada. Bu nedenle aşağıdaki kural kümeleri eşdeğerdir:

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      match /landmarks/{landmark} {
        allow read, write: if <condition>;
      }
    }
  }
}
service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city}/landmarks/{landmark} {
      allow read, write: if <condition>;
    }
  }
}

Yinelemeli joker karakterler

Kuralların keyfi derinlikte bir hiyerarşiye uygulanmasını istiyorsanız, yinelemeli joker karakter sözdizimini kullanın, {name=**} :

service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the cities collection as well as any document
    // in a subcollection.
    match /cities/{document=**} {
      allow read, write: if <condition>;
    }
  }
}

Özyinelemeli joker sözdizimini kullanırken, joker karakter değişkeni, belge derinlemesine iç içe geçmiş bir alt koleksiyonda yer alsa bile, eşleşen yolun tamamını içerecektir. Örneğin, yukarıda listelenen kurallar /cities/SF/landmarks/coit_tower bulunan bir belgeyle /cities/SF/landmarks/coit_tower ve document değişkeninin değeri SF/landmarks/coit_tower .

Bununla birlikte, yinelemeli joker karakterlerin davranışının kural sürümüne bağlı olduğunu unutmayın.

Versiyon 1

Güvenlik kuralları varsayılan olarak sürüm 1'i kullanır. 1. sürümde, yinelemeli joker karakterler bir veya daha fazla yol öğesiyle eşleşir. Boş bir yolla match /cities/{city}/{document=**} , bu nedenle match /cities/{city}/{document=**} eşleşir, ancak cities koleksiyonundaki match /cities/{document=**} , match /cities/{document=**} , içindeki her iki belgeyle eşleşir. cities koleksiyonu ve alt koleksiyonları.

Özyinelemeli joker karakterler bir maç açıklamasının sonunda gelmelidir.

Versiyon 2

Güvenlik kurallarının 2. sürümünde, özyinelemeli joker karakterler sıfır veya daha fazla yol öğesiyle eşleşir. match/cities/{city}/{document=**} , herhangi bir alt koleksiyondaki belgelerin yanı sıra cities koleksiyonundaki belgelerle eşleşir.

rules_version = '2'; ekleyerek sürüm 2'ye dahil rules_version = '2'; güvenlik kurallarınızın başında:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the cities collection as well as any document
    // in a subcollection.
    match /cities/{city}/{document=**} {
      allow read, write: if <condition>;
    }
  }
}

Maç ifadesi başına en fazla bir özyinelemeli joker karakteriniz olabilir, ancak sürüm 2'de bu joker karakteri eşleşme ifadesinin herhangi bir yerine yerleştirebilirsiniz. Örneğin:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the songs collection group
    match /{path=**}/songs/{song} {
      allow read, write: if <condition>;
    }
  }
}

Koleksiyon grubu sorgularını kullanırsanız, sürüm 2'yi kullanmanız gerekir, bkz. Koleksiyon grubu sorgularını koruma .

Çakışan eşleşme ifadeleri

Bir belgenin birden fazla match ifadesiyle eşleşmesi mümkündür. Birden çok allow ifadesinin bir istekle eşleştiği durumda, koşullardan herhangi biri true erişime izin verilir:

service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the 'cities' collection.
    match /cities/{city} {
      allow read, write: if false;
    }

    // Matches any document in the 'cities' collection or subcollections.
    match /cities/{document=**} {
      allow read, write: if true;
    }
  }
}

Yukarıdaki örnekte, ilk kural her zaman false olsa da, ikinci kural her zaman true olduğundan, cities koleksiyonundaki tüm okuma ve yazma işlemlerine izin verilecektir.

Güvenlik kuralı sınırları

Güvenlik kurallarıyla çalışırken aşağıdaki sınırlamalara dikkat edin:

Sınırı Detaylar
İstek başına maksimum exists() , get() ve getAfter() çağrı sayısı
  • Tek belge istekleri ve sorgu istekleri için 10.
  • Çoklu belge okumaları, işlemler ve toplu yazmalar için 20. Önceki sınır olan 10, her işlem için de geçerlidir.

    Örneğin, 3 yazma işlemiyle toplu bir yazma isteği oluşturduğunuzu ve güvenlik kurallarınızın her yazmayı doğrulamak için 2 belge erişim çağrısı kullandığını hayal edin. Bu durumda, her yazma, 10 erişim çağrısından 2'sini kullanır ve toplu yazma isteği, 20 erişim çağrısından 6'sını kullanır.

Bu sınırlardan birinin aşılması, izin verilmedi hatasıyla sonuçlanır.

Bazı belge erişim aramaları önbelleğe alınabilir ve önbelleğe alınan aramalar sınırlara dahil edilmez.

Maksimum iç içe geçmiş match bildirimi derinliği 10
Yol segmentlerinde, bir dizi iç içe match ifadesinde izin verilen maksimum yol uzunluğu 100
Bir dizi iç içe match ifadesinde izin verilen maksimum yol yakalama değişkeni sayısı 20
Maksimum işlev çağrısı derinliği 20
Maksimum işlev bağımsız değişkeni sayısı 7
İşlev başına maksimum let değişken bağlama sayısı 10
Maksimum özyinelemeli veya döngüsel işlev çağrısı sayısı 0 (izin verilmez)
İstek başına değerlendirilen maksimum ifade sayısı 1.000
Bir kural kümesinin maksimum boyutu Verax kural kümeleri iki boyut sınırına uymalıdır:
  • firebase deploy konsolundan veya firebase deploy kullanılarak firebase deploy yayınlanan Verax kural seti metin kaynağının boyutunda 256 KB sınır.
  • Firebase, Verax kaynağını işlediğinde ve arka uçta etkinleştirdiğinde ortaya çıkan derlenmiş kural kümesinin boyutunda 250 KB sınır.

Bulut depolama

Basit yapı

Cloud Firestore ve Cloud Storage'daki Firebase Güvenlik Kuralları, aşağıdaki yapı ve sözdizimini kullanır:

service <<name>> {
  // Match the resource path.
  match <<path>> {
    // Allow the request if the following conditions are true.
    allow <<methods>> : if <<condition>>
  }
}

Kuralları oluştururken aşağıdaki temel kavramları anlamak önemlidir:

  • İstek: allow deyiminde çağrılan yöntem veya yöntemler. Bunlar, çalıştırılmasına izin verdiğiniz yöntemlerdir. Standart yöntemler şunlardır: get , list , create , update ve delete . read ve write kolaylığı yöntemleri, belirtilen veritabanı veya depolama yolunda geniş okuma ve yazma erişimi sağlar.
  • Yol: URI yolu olarak gösterilen veritabanı veya depolama konumu.
  • Kural: Bir isteğe doğru olarak değerlendirildiğinde izin veren bir koşul içeren allow ifadesi.

Eşleşen yollar

Cloud Storage Güvenlik Kuralları, Cloud Storage'daki dosyalara erişmek için kullanılan dosya yollarıyla match . Kurallar, tam yollarla veya joker karakter yollarıyla match ve kurallar da iç içe yerleştirilebilir. Hiçbir eşleşme kuralı bir istek yöntemine izin vermiyorsa veya koşul false değerlendirilirse, istek reddedilir.

Tam eşleşmeler

// Exact match for "images/profilePhoto.png"
match /images/profilePhoto.png {
  allow write: if <condition>;
}

// Exact match for "images/croppedProfilePhoto.png"
match /images/croppedProfilePhoto.png {
  allow write: if <other_condition>;
}

İç içe geçmiş maçlar

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/profilePhoto.png"
  match /profilePhoto.png {
    allow write: if <condition>;
  }

  // Exact match for "images/croppedProfilePhoto.png"
  match /croppedProfilePhoto.png {
    allow write: if <other_condition>;
  }
}

Joker karakter eşleşmeleri

Kurallar, joker karakterler kullanarak bir kalıbı match için de kullanılabilir. Joker karakter, profilePhoto.png gibi tek bir dizeyi veya images/profilePhoto.png gibi birden çok yol parçasını temsil eden adlandırılmış bir değişkendir.

Joker karakter adının etrafına {string} gibi kaşlı ayraçlar eklenerek bir joker karakter oluşturulur. Joker karakter adına =** eklenerek birden çok segment joker karakteri bildirilebilir, örneğin {path=**} :

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/*"
  // e.g. images/profilePhoto.png is matched
  match /{imageId} {
    // This rule only matches a single path segment (*)
    // imageId is a string that contains the specific segment matched
    allow read: if <condition>;
  }

  // Exact match for "images/**"
  // e.g. images/users/user:12345/profilePhoto.png is matched
  // images/profilePhoto.png is also matched!
  match /{allImages=**} {
    // This rule matches one or more path segments (**)
    // allImages is a path that contains all segments matched
    allow read: if <other_condition>;
  }
}

Bir dosyayla birden çok kural eşleşirse sonuç, tüm kural değerlendirmelerinin sonucunun OR sonucudur. Yani, dosyanın eşleştiği herhangi bir kural true , sonuç true .

Yukarıdaki kurallarda, "images / other_condition " dosyası condition veya other_condition doğru olarak değerlendirilirse okunabilirken "images / users / user: 12345 / other_condition " dosyası yalnızca other_condition sonucuna other_condition .

Dosya adı veya yol yetkilendirmesi sağlamak için match içinde bir joker karakter değişkenine başvurulabilir:

// Another way to restrict the name of a file
match /images/{imageId} {
  allow read: if imageId == "profilePhoto.png";
}

Cloud Storage Güvenlik Kuralları art arda sıralanmaz ve kurallar yalnızca istek yolu, belirtilen kurallarla bir yolla eşleştiğinde değerlendirilir.

Değerlendirme talep edin

Yüklemeler, indirmeler, meta veri değişiklikleri ve silme işlemleri, Cloud Storage'a gönderilen request kullanılarak değerlendirilir. request değişkeni, request gerçekleştirildiği dosya yolunu, isteğin alındığı zamanı ve istek bir yazma ise yeni resource değerini içerir. HTTP üstbilgileri ve kimlik doğrulama durumu da dahildir.

request nesne, kullanıcının benzersiz bir kimlik ve Firebase Kimlik yükünü içerir request.auth de açıklanacaktır nesnesi kimlik doğrulama dokümanların bölümü.

request nesnesindeki özelliklerin tam listesi aşağıda mevcuttur:

Emlak Tür Açıklama
auth eşleme <dize, dize> Kaydedilir kullanıcı, sağladığında uid , kullanıcının benzersiz bir kimlik ve token Firebase Kimlik JWT iddiaların bir harita. Aksi takdirde null olacaktır.
params eşleme <dize, dize> İsteğin sorgu parametrelerini içeren harita.
path yol İsteğin gerçekleştirildiği path temsil eden bir yol.
resource eşleme <dize, dize> Yeni kaynak değeri, yalnızca write isteklerinde bulunur.
time zaman damgası İsteğin değerlendirildiği sunucu zamanını temsil eden bir zaman damgası.

Kaynak değerlendirmesi

Kuralları değerlendirirken, yüklenen, indirilen, değiştirilen veya silinen dosyanın meta verilerini de değerlendirmek isteyebilirsiniz. Bu, yalnızca belirli içerik türlerine sahip dosyaların yüklenmesine veya yalnızca belirli bir boyuttan büyük dosyaların silinmesine izin vermek gibi şeyler yapan karmaşık ve güçlü kurallar oluşturmanıza olanak tanır.

Cloud Storage için Firebase Güvenlik Kuralları, bir Cloud Storage nesnesinde ortaya çıkan meta verilerin anahtar / değer çiftlerini içeren resource nesnesinde dosya meta verileri sağlar. Bu özellikler, veri bütünlüğünü sağlamak için read veya write taleplerinde incelenebilir.

write isteklerinde (karşıya yüklemeler, meta veri güncellemeleri ve silmeler gibi), istek yolunda halihazırda var olan dosya için dosya meta verilerini içeren resource nesnesine ek olarak, request.resource nesnesini de kullanabilirsiniz Yazmaya izin veriliyorsa yazılacak dosya meta verilerinin bir alt kümesini içeren. Veri bütünlüğünü sağlamak veya dosya türü veya boyutu gibi uygulama kısıtlamalarını uygulamak için bu iki değeri kullanabilirsiniz.

resource nesnesindeki özelliklerin tam listesi aşağıda mevcuttur:

Emlak Tür Açıklama
name dizi Nesnenin tam adı
bucket dizi Bu nesnenin bulunduğu paketin adı.
generation int Bu nesnenin Google Cloud Storage nesnesi oluşturma .
metageneration int Bu nesnenin Google Cloud Storage nesnesi meta üretimi .
size int Bayt cinsinden nesnenin boyutu.
timeCreated zaman damgası Bir nesnenin oluşturulduğu zamanı temsil eden bir zaman damgası.
updated zaman damgası Bir nesnenin en son güncellendiği zamanı temsil eden bir zaman damgası.
md5Hash dizi Nesnenin MD5 karması.
crc32c dizi Nesnenin crc32c karması.
etag dizi Bu nesneyle ilişkili etag.
contentDisposition dizi Bu nesneyle ilişkili içerik düzeni.
contentEncoding dizi Bu nesneyle ilişkili içerik kodlaması.
contentLanguage dizi Bu nesneyle ilişkilendirilen içerik dili.
contentType dizi Bu nesneyle ilişkili içerik türü.
metadata eşleme <dize, dize> Ek, geliştirici tarafından belirlenen özel meta verilerin anahtar / değer çiftleri.

request.resource ; generation , metageneration , etag , timeCreated ve updated hariç tüm bunları içerir.

Tam Örnek

Hepsini bir araya getirerek, bir görüntü depolama çözümü için eksiksiz bir kural örneği oluşturabilirsiniz:

service firebase.storage {
 match /b/{bucket}/o {
   match /images {
     // Cascade read to any image type at any path
     match /{allImages=**} {
       allow read;
     }

     // Allow write files to the path "images/*", subject to the constraints:
     // 1) File is less than 5MB
     // 2) Content type is an image
     // 3) Uploaded content type matches existing content type
     // 4) File name (stored in imageId wildcard variable) is less than 32 characters
     match /{imageId} {
       allow write: if request.resource.size < 5 * 1024 * 1024
                    && request.resource.contentType.matches('image/.*')
                    && request.resource.contentType == resource.contentType
                    && imageId.size() < 32
     }
   }
 }
}

Gerçek Zamanlı Veritabanı

Basit yapı

Gerçek Zamanlı Veritabanında Firebase Güvenlik Kuralları, bir JSON belgesinde bulunan JavaScript benzeri ifadelerden oluşur.

Aşağıdaki sözdizimini kullanırlar:

{
  "rules": {
    "<<path>>": {
    // Allow the request if the condition for each method is true.
      ".read": <<condition>>,
      ".write": <<condition>>,
      ".validate": <<condition>>
    }
  }
}

Kuralda üç temel unsur vardır:

  • Yol: Veritabanı konumu. Bu, veritabanınızın JSON yapısını yansıtır.
  • İstek: Bunlar, kuralın erişim vermek için kullandığı yöntemlerdir. read ve write kuralları, geniş okuma ve yazma erişimi sağlarken, validate kuralları, gelen veya mevcut verilere dayalı erişim sağlamak için ikincil bir doğrulama işlevi görür.
  • Koşul: Bir isteğe doğru olarak değerlendirildiğinde izin veren koşul.

Kurallar yollara nasıl uygulanır?

Gerçek Zamanlı Veritabanında Kurallar atomik olarak uygulanır, yani daha yüksek seviyeli ana düğümlerdeki kurallar daha ayrıntılı alt düğümlerdeki kuralları geçersiz kılar ve daha derin bir düğümdeki kurallar bir ana yola erişim izni veremez. Üst yollardan biri için zaten verdiyseniz, veritabanı yapınızda daha derin bir yolda erişimi iyileştiremez veya iptal edemezsiniz.

Aşağıdaki kuralları göz önünde bulundurun:

{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          // ignored, since read was allowed already
          ".read": false
        }
     }
  }
}

Bu güvenlik yapısı /bar/ öğesinin /foo/ true değerine sahip bir alt baz içerdiğinde okunmasına izin verir. ".read": false /foo/bar/ altındaki ".read": false kuralın burada hiçbir etkisi yoktur, çünkü erişim alt yol tarafından iptal edilemez.

Hemen sezgisel görünmese de, bu kural dilinin güçlü bir parçasıdır ve çok karmaşık erişim ayrıcalıklarının minimum çabayla uygulanmasına izin verir. Bu, özellikle kullanıcı tabanlı güvenlik için kullanışlıdır.

Ancak, .validate kuralları art .validate . Bir yazmaya izin verilebilmesi için tüm doğrulama kurallarının hiyerarşinin tüm düzeylerinde karşılanması gerekir.

Ek olarak, kurallar bir ana yola geri uygulanmadığından, istenen konumda veya erişim izni veren bir üst konumda bir kural yoksa okuma veya yazma işlemi başarısız olur. Etkilenen her alt yol erişilebilir olsa bile, ana konumda okuma tamamen başarısız olacaktır. Şu yapıyı düşünün:

{
  "rules": {
    "records": {
      "rec1": {
        ".read": true
      },
      "rec2": {
        ".read": false
      }
    }
  }
}

Kurallar atomik değerlendirilmesini anlamakta olmadan, alma gibi gözükebilir /records/ dönecekti yolu rec1 ancak rec2 . Ancak asıl sonuç bir hatadır:

JavaScript
var db = firebase.database();
db.ref("records").once("value", function(snap) {
  // success method is not called
}, function(err) {
  // error callback triggered with PERMISSION_DENIED
});
Amaç-C
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[_ref child:@"records"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
  // success block is not called
} withCancelBlock:^(NSError * _Nonnull error) {
  // cancel block triggered with PERMISSION_DENIED
}];
Swift
var ref = FIRDatabase.database().reference()
ref.child("records").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // success block is not called
}, withCancelBlock: { error in
    // cancel block triggered with PERMISSION_DENIED
})
Java
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // success method is not called
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback triggered with PERMISSION_DENIED
  });
});
DİNLENME
curl https://docs-examples.firebaseio.com/rest/records/
# response returns a PERMISSION_DENIED error

/records/ okuma işlemi atomik olduğundan ve /records/ altındaki tüm verilere erişim izni veren bir okuma kuralı olmadığından, bu bir PERMISSION_DENIED hatası oluşturacaktır. Firebase konsolumuzdaki güvenlik simülatöründe bu kuralı değerlendirirsek okuma işleminin reddedildiğini görebiliriz:

Attempt to read /records with auth=Success(null)
    /
    /records

No .read rule allowed the operation.
Read was denied.

Hiçbir okuma kuralı /records/ yoluna erişime izin vermediğinden işlem reddedildi, ancak rec1 kuralının istediğimiz yolda olmadığı için asla değerlendirilmediğine dikkat edin. rec1 getirmek için doğrudan rec1 gerekir:

JavaScript
var db = firebase.database();
db.ref("records/rec1").once("value", function(snap) {
  // SUCCESS!
}, function(err) {
  // error callback is not called
});
Amaç-C
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[ref child:@"records/rec1"] observeSingleEventOfType:FEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
    // SUCCESS!
}];
Swift
var ref = FIRDatabase.database().reference()
ref.child("records/rec1").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // SUCCESS!
})
Java
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records/rec1");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // SUCCESS!
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback is not called
  }
});
DİNLENME
curl https://docs-examples.firebaseio.com/rest/records/rec1
# SUCCESS!

Konum değişkeni

Gerçek Zamanlı Veritabanı Kuralları, yol segmentlerini eşleştirmek için bir $location değişkenini destekler. Kuralınızı yol boyunca herhangi bir alt düğümle eşleştirmek için yol segmentinizin önünde $ önekini kullanın.

  {
    "rules": {
      "rooms": {
        // This rule applies to any child of /rooms/, the key for each room id
        // is stored inside $room_id variable for reference
        "$room_id": {
          "topic": {
            // The room's topic can be changed if the room id has "public" in it
            ".write": "$room_id.contains('public')"
          }
        }
      }
    }
  }

$variable sabit yol adlarıyla paralel olarak da kullanabilirsiniz.

  {
    "rules": {
      "widget": {
        // a widget can have a title or color attribute
        "title": { ".validate": true },
        "color": { ".validate": true },

        // but no other child paths are allowed
        // in this case, $other means any key excluding "title" and "color"
        "$other": { ".validate": false }
      }
    }
  }