Cloud Firestore और Realtime Database, दोनों ही जानकारी की सुरक्षा और ऐक्सेस कंट्रोल के लिए, खास तौर पर बनाई गई, सटीक और असरदार नियमों की भाषाओं पर काम करते हैं. हालांकि, नियम ज़्यादा लंबे और जटिल होने पर, आपको उनके व्यवहार में मौजूद गड़बड़ियों को ठीक करने में मदद की ज़रूरत पड़ सकती है.
Firebase Emulators में, नियमों की कवरेज रिपोर्ट जनरेट करने की सुविधा शामिल होती है. इससे, गड़बड़ी को फिर से जनरेट करने पर, यह देखा जा सकता है कि हर सबएक्सप्रेशन का आकलन किस तरह किया गया. इन रिपोर्ट में, यह जानकारी भी मिलती है कि हर टेस्ट केस में किसी नियम का इस्तेमाल कितनी बार किया गया. जैसे, "लाइन कवरेज" की पारंपरिक तकनीकों में किया जाता है.
रिपोर्ट जनरेट करना
टेस्ट का सुइट चलाने के बाद, टेस्ट कवरेज रिपोर्ट ऐक्सेस की जा सकती हैं. इनमें यह दिखाया जाता है कि आपके हर सुरक्षा नियम का आकलन कैसे किया गया.
रिपोर्ट पाने के लिए, एम्युलेटर के चालू होने के दौरान, उस पर मौजूद किसी एंडपॉइंट के लिए क्वेरी करें. ब्राउज़र के साथ काम करने वाले वर्शन के लिए, यह यूआरएल इस्तेमाल करें:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Realtime Database
http://localhost:9000/.inspect/coverage?ns=<database_name>
इससे आपके नियमों को एक्सप्रेशन और सबएक्सप्रेशन में बांटा जाता है. इन पर कर्सर ले जाकर, ज़्यादा जानकारी देखी जा सकती है. इसमें आकलन की संख्या और दिखाई गई वैल्यू शामिल होती हैं. इस डेटा के रॉ JSON वर्शन के लिए, अपनी क्वेरी में यह यूआरएल शामिल करें:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Realtime Database
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
उदाहरण के तौर पर बनाए गए नियमों में मौजूद गड़बड़ियां ठीक करना
टेस्ट रिपोर्ट आसानी से जनरेट करने के लिए, GitHub पर उपलब्ध, एम्युलेटर के क्विकस्टार्ट इस्तेमाल करें Cloud Firestore और Realtime Database. इन क्विकस्टार्ट से, एम्युलेटर को सही तरीके से इंस्टॉल और शुरू करने में मदद मिलती है. इसके बाद, नियमों के उदाहरण सेट से सैंपल टेस्ट जनरेट किए जा सकते हैं.
Cloud Firestore का इस्तेमाल करने वाले किसी उदाहरण ऐप्लिकेशन पर विचार करें. यह ऐप्लिकेशन, यह गिनता है कि उपयोगकर्ता किसी बटन पर कितनी बार क्लिक करते हैं. यह ऐप्लिकेशन, इन नियमों का इस्तेमाल करता है:
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
रिपोर्ट में, ये गड़बड़ियां दिखती हैं, जिनमें वैल्यू तय नहीं की गई है और जिनकी वैल्यू शून्य है:

इस उदाहरण में समस्या यह है कि नियमों में, दस्तावेज़ बनाने और उसे अपडेट करने के बीच कोई अंतर नहीं है. इसलिए, अगर दस्तावेज़ मौजूद नहीं है, तो उसे लिखा नहीं जा सकता. साथ ही, दस्तावेज़ मौजूद न होने की वजह से, उसे बनाया भी नहीं जा सकता. "लिखने" की कार्रवाई को दो और खास कार्रवाइयों — "बनाना" और "अपडेट करना" में बांटने से, यह समस्या हल हो जाती है.
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; } } }
जनरेट की गई रिपोर्ट में, यह दिखाया जाता है कि हर नियम का इस्तेमाल कितनी बार किया गया और क्या दिखाया गया.
