Cloud Firestore এবং Realtime Database উভয়ই তথ্য নিরাপত্তা এবং অ্যাক্সেস নিয়ন্ত্রণ পরিচালনার জন্য বিশেষভাবে তৈরি শক্তিশালী ও সংক্ষিপ্ত রুলস ল্যাঙ্গুয়েজের উপর নির্ভর করে। তবে, রুলসগুলো যত দীর্ঘ ও জটিল হতে থাকে, সেগুলোর আচরণে ত্রুটি খুঁজে বের করতে আপনার সাহায্যের প্রয়োজন হতে পারে।
ফায়ারবেস এমুলেটরগুলোতে রুল কভারেজ রিপোর্ট তৈরি করার সুবিধা রয়েছে, ফলে কোনো ত্রুটি পুনরায় ঘটানোর সময় আপনি দেখতে পারেন যে প্রতিটি সাব-এক্সপ্রেশন ঠিক কী মান দেখিয়েছে। এই রিপোর্টগুলো প্রচলিত 'লাইন কভারেজ' কৌশলের মতোই, প্রতিটি টেস্ট কেস একটি রুল কতবার ব্যবহার করেছে সে সম্পর্কেও তথ্য প্রদান করে।
একটি প্রতিবেদন তৈরি করুন
একাধিক পরীক্ষা চালানোর পর, আপনি টেস্ট কভারেজ রিপোর্টগুলো দেখতে পারবেন, যেখানে দেখানো হবে আপনার প্রতিটি নিরাপত্তা নিয়ম কীভাবে মূল্যায়ন করা হয়েছে।
রিপোর্টগুলো পেতে, এমুলেটরটি চালু থাকা অবস্থায় এর একটি এক্সপোজড এন্ডপয়েন্টে কোয়েরি করুন। ব্রাউজার-বান্ধব সংস্করণের জন্য, নিম্নলিখিত URL-টি ব্যবহার করুন:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html
Realtime Database
http://localhost:9000/.inspect/coverage?ns=<database_name>
এটি আপনার নিয়মগুলোকে এক্সপ্রেশন এবং সাব-এক্সপ্রেশনে বিভক্ত করে, যেগুলোর উপর মাউস রাখলে আপনি আরও তথ্য জানতে পারবেন, যার মধ্যে ইভ্যালুয়েশনের সংখ্যা এবং ফেরত আসা মান অন্তর্ভুক্ত। এই ডেটার র JSON সংস্করণের জন্য, আপনার কোয়েরিতে নিম্নলিখিত URL-টি অন্তর্ভুক্ত করুন:
Cloud Firestore
http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage
Realtime Database
http://localhost:9000/.inspect/coverage.json?ns=<database_name>
ডিবাগিং উদাহরণ নিয়ম
সহজে একটি টেস্ট রিপোর্ট তৈরি করতে, 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; } } }
উপরে দেখানো নিয়মগুলোর ত্রুটি ডিবাগ করতে, নিম্নলিখিত নমুনা জাভাস্ক্রিপ্ট পরীক্ষাটি ব্যবহার করুন:
const counter0 = db.collection("counters").doc("0");
await firebase.assertSucceeds(counter0.set({value: 0}));
এমুলেটরটি উপরে উল্লিখিত URL-এ একটি রিপোর্ট তৈরি করে:
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; } } }
তৈরি হওয়া রিপোর্টটিতে দেখানো হয় প্রতিটি নিয়ম কতবার ব্যবহৃত হয়েছে এবং তার জবাবে কী পাওয়া গেছে।
