Cloud Firestore और Realtime Database, दोनों ही बेहतर और कम शब्दों वाली नियम भाषाओं पर आधारित हैं. इन्हें खास तौर पर, जानकारी की सुरक्षा और ऐक्सेस कंट्रोल को मैनेज करने के लिए बनाया गया है. हालांकि, जैसे-जैसे नियम लंबे और जटिल होते जाते हैं, आपको उनके काम करने के तरीके से जुड़ी गड़बड़ियों को डीबग करने में मदद की ज़रूरत पड़ सकती है.
Firebase एमुलेटर में, नियम कवरेज रिपोर्ट जनरेट करने की सुविधा शामिल होती है. इससे, किसी गड़बड़ी को दोहराने पर, यह देखा जा सकता है कि हर सब-एक्सप्रेशन का आकलन किस तरह किया गया. इन रिपोर्ट से यह जानकारी भी मिलती है कि हर टेस्ट केस में, किसी नियम का कितनी बार इस्तेमाल किया गया. जैसे, "लाइन कवरेज" की पारंपरिक तकनीकें.
रिपोर्ट जनरेट करना
कई तरह की जांच करने के बाद, जांच के दायरे की रिपोर्ट ऐक्सेस की जा सकती हैं. इन रिपोर्ट से पता चलता है कि आपके हर सुरक्षा नियम का आकलन कैसे किया गया.
रिपोर्ट पाने के लिए, एमुलेटर के चलने के दौरान, किसी एक्सपोज़ किए गए एंडपॉइंट पर क्वेरी करें. ब्राउज़र के हिसाब से बने वर्शन के लिए, इस यूआरएल का इस्तेमाल करें:
http://localhost:8080/emulator/v1/projects/<database_name> :ruleCoverage.html
http://localhost:9000/.inspect/coverage?ns=<database_name>
इससे आपके नियमों को एक्सप्रेशन और सब-एक्सप्रेशन में बांटा जाता है. ज़्यादा जानकारी के लिए, इन पर कर्सर घुमाएं. इसमें, आकलन की संख्या और दिखाए गए वैल्यू की जानकारी भी शामिल है. इस डेटा के रॉ JSON वर्शन के लिए, अपनी क्वेरी में यह यूआरएल शामिल करें:
http://localhost:8080/emulator/v1/projects/<database_name> :ruleCoverage
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
नियमों को डीबग करने के उदाहरण
टेस्ट रिपोर्ट आसानी से जनरेट करने के लिए, Cloud Firestore और Realtime Database के लिए GitHub पर उपलब्ध, एमुलेटर के शुरुआती निर्देशों का इस्तेमाल करें. ये शुरुआती निर्देश, एमुलेटर को सही तरीके से इंस्टॉल करने और शुरू करने के बारे में बताते हैं. इसके बाद, नियमों के उदाहरण के सेट से सैंपल टेस्ट जनरेट करने के बारे में बताते हैं.
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; } } }
ऊपर दिखाए गए नियमों में मौजूद गड़बड़ियों को डीबग करने के लिए, यहां दिए गए JavaScript टेस्ट का इस्तेमाल करें:
const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));
एमुलेटर, ऊपर दिए गए यूआरएल पर उपलब्ध रिपोर्ट जनरेट करता है:
http://localhost:8080/emulator/v1/projects/<database_name> :ruleCoverage.html
रिपोर्ट में, तय नहीं की गई और शून्य वैल्यू वाली ये गड़बड़ियां दिखती हैं:
इस उदाहरण में समस्या यह है कि नियमों में दस्तावेज़ बनाने और उसे अपडेट करने के बीच कोई फ़र्क़ नहीं किया गया है. इसलिए, अगर दस्तावेज़ मौजूद नहीं है, तो उसमें बदलाव करने की अनुमति नहीं है. साथ ही, दस्तावेज़ मौजूद न होने की वजह से, उसे बनाया भी नहीं जा सकता. "लिखें" को दो अलग-अलग ऑपरेशन — "बनाएं" और "अपडेट करें" — में बांटने से समस्या हल हो जाती है.
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; } } }
जनरेट की गई रिपोर्ट से पता चलता है कि हर नियम का कितनी बार इस्तेमाल किया गया और क्या रिटर्न मिला.