Cloud Firestore ve Realtime Database, bilgi güvenliğini ve erişim kontrolünü yönetmek için özel olarak oluşturulmuş güçlü, özlü kural dillerine dayanır. Ancak, kurallar uzadıkça ve karmaşıklaştıkça, davranışlarındaki hataları ayıklamak için biraz yardıma ihtiyacınız olabilir.
Firebase Emülatörleri, kural kapsamı raporları oluşturma yeteneği içerir, böylece bir hatayı yeniden oluşturduğunuzda her bir alt ifadenin tam olarak neye göre değerlendirildiğini görebilirsiniz. Raporlar ayrıca, geleneksel "satır kapsamı" teknikleri gibi, her bir test senaryosunun bir kuralı ne sıklıkta kullandığı hakkında bilgi sağlar.
Rapor oluştur
Bir dizi testi çalıştırdıktan sonra, güvenlik kurallarınızdan her birinin nasıl değerlendirildiğini gösteren test kapsamı raporlarına erişebilirsiniz.
Raporları almak için öykünücü çalışırken açıkta kalan bir uç noktayı sorgulayın. Tarayıcı dostu bir sürüm için aşağıdaki URL'yi kullanın:
Bulut Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Gerçek Zamanlı Veritabanı
http://localhost:9000/.inspect/coverage?ns=<database_name>
Bu, kurallarınızı, değerlendirme sayısı ve döndürülen değerler dahil olmak üzere daha fazla bilgi için fareyle üzerine getirebileceğiniz ifadelere ve alt ifadelere ayırır. Bu verilerin ham JSON sürümü için sorgunuza aşağıdaki URL'yi ekleyin:
Bulut Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Gerçek Zamanlı Veritabanı
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
Hata ayıklama örnek kuralları
Kolayca bir test raporu oluşturmak için GitHub for Cloud Firestore ve Realtime Database'de bulunan öykünücü hızlı başlangıçlarını kullanın. Bu hızlı başlangıçlar, öykünücüleri düzgün bir şekilde yükleme ve başlatma, ardından örnek bir kurallar kümesinden ö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 uygulamayı ele alalım. Uygulama aşağıdaki kuralları kullanır:
Bulut 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}));
Öykünücü, yukarıda belirtilen URL'de bulunan bir rapor oluşturur:
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Rapor, aşağıdaki tanımsız ve boş değerli hataları gösterir:
Bu özel örnekle ilgili sorun, kuralların belge oluşturma ve belgeyi güncelleme arasında ayrım yapmamasıdır. Sonuç olarak, belge yoksa yazmaya izin verilmez ve belge olmadığı için oluşturulamaz. "Yazma"yı iki daha spesifik işleme ayırmak - "yaratma" ve "güncelleme" - sorunu çözer.
Bulut 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 rapor, her bir kuralın ne sıklıkta kullanıldığını ve neyin döndürüldüğünü gösterir.