Cloud Firestore ve Realtime Database, bilgi güvenliğini ve erişim kontrolünü yönetmek için özel olarak oluşturulmuş güçlü ve kısa kurallar dillerine dayanır. Ancak kurallar uzayıp karmaşıklaştıkça davranışlarındaki hataları ayıklamak için yardıma ihtiyacınız olabilir.
Firebase Emulators, kural kapsamı raporları oluşturma özelliğini içerir. Böylece bir hatayı yeniden oluşturduğunuzda her bir alt ifadenin tam olarak neye karşılık geldiğini görebilirsiniz. Raporlar, her test senaryosunun geleneksel "satır kapsamı" teknikleri gibi bir kuralı ne sıklıkta kullandığı hakkında da bilgi sağlar.
Rapor oluşturma
Bir dizi test çalıştırdıktan sonra, güvenlik kurallarınızın her birinin nasıl değerlendirildiğini gösteren test kapsamı raporlarına erişebilirsiniz.
Raporları almak için emülatör çalışırken emülatördeki herkese açık bir uç noktayı sorgulayın. Tarayıcı dostu bir sürüm için aşağıdaki URL'yi kullanın:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Realtime Database
http://localhost:9000/.inspect/coverage?ns=<database_name>
Bu, kurallarınızı ifadeler ve alt ifadeler halinde ayırır. Değerlendirme sayısı ve döndürülen değerler gibi daha fazla bilgi için imleçle bu ifadelerin üzerine gelebilirsiniz. Bu verilerin ham JSON sürümü için sorgunuza aşağıdaki URL'yi ekleyin:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Realtime Database
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Örnek kurallarda hata ayıklama
Test raporunu kolayca oluşturmak için Cloud Firestore ve Realtime Database için GitHub'da bulunan emülatör hızlı başlangıç kılavuzlarını kullanın. Bu hızlı başlangıç kılavuzları, emülatörlerin doğru şekilde yüklenmesi ve başlatılması, ardından örnek bir kural grubundan örnek testler oluşturma konusunda size yol gösterir.
Kullanıcıların bir düğmeyi kaç kez tıkladığını sayan Cloud Firestore kullanan bir örnek uygulama düşünün. Uygulama aşağıdaki kuralları kullanır:
Cloud Firestore
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow write: if request.resource.data.value == resource.data.value +1; } } }
Yukarıda gösterilen kurallardaki hataları ayıklamak için aşağıdaki örnek JavaScript testini kullanın:
const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));
Emülatör, yukarıda belirtilen URL'de kullanılabilen bir rapor oluşturur:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Raporda aşağıdaki tanımlanmamış ve boş değer hataları gösterilir:
Bu örnekteki sorun, kuralların doküman oluşturma ve doküman güncelleme arasında ayrım yapmamasıdır. Dolayısıyla, doküman mevcut değilse yazma işlemine izin verilmez ve doküman mevcut olmadığı için oluşturulamaz. "Yazma" işlemini iki daha ayrıntılı işleme ("oluşturma" ve "güncelleme") ayırmak sorunu çözer.
Cloud Firestore
service cloud.firestore { match /databases/{database}/documents { match /counters/{counter} { allow read; allow create: if request.resource.data.value == 0; allow update: if request.resource.data.value == resource.data.value +1; } } }
Oluşturulan raporda, her kuralın ne sıklıkta kullanıldığı ve neyin döndürüldüğü gösterilir.