Hem Cloud Firestore hem de Realtime Database, bilgi güvenliğini ve erişim denetimini yönetmek için özel olarak tasarlanmış güçlü ve kısa kurallar dillerini kullanır. Ancak kurallar daha uzun ve karmaşık hale geldikçe davranışlarında hata ayıklama konusunda yardıma ihtiyacınız olabilir.
Firebase emülatörleri, kural kapsamı raporları oluşturma özelliğine sahiptir. Böylece, bir hatayı yeniden oluşturduğunuzda her alt ifadenin tam olarak neyle değerlendirildiğini görebilirsiniz. Raporlar, her testin bir kuralı ne sıklıkta kullandığı hakkında da bilgi sağlar (ör. geleneksel "satır kapsama" teknikleri).
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 açığa çıkan 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 işlem, kurallarınızı ifadelere ve alt ifadelere böler. Bunları, değerlendirme sayısı ve döndürülen değerler dahil olmak üzere daha fazla bilgi için fareyle ü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örleri doğru şekilde yükleme ve başlatma, 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 örnek bir uygulama düşünün. Uygulama aşağıdaki kuralları uygular:
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ımlı olmayan ve boş değer hataları gösterilir:
Bu örnekte sorun, kuralların dokümanı oluşturma ve dokümanı güncelleme arasında ayrım yapmamasıdır. Sonuç olarak, doküman mevcut değilse yazma işlemine izin verilmez ve doküman mevcut olmadığı için oluşturulamaz. "Yazma" işlemini daha belirli iki 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 nelerin döndürüldüğü gösterilir.