আপনার ক্লাউড ফায়ারস্টোর নিরাপত্তা নিয়ম পরীক্ষা করুন

আপনার অ্যাপ তৈরি করার সময়, আপনি আপনার Cloud Firestore ডাটাবেসে অ্যাক্সেস বন্ধ করে দিতে চাইতে পারেন। তবে, চালু করার আগে, আপনার আরও সূক্ষ্ম Cloud Firestore Security Rules প্রয়োজন হবে। Cloud Firestore এমুলেটরের সাহায্যে, আপনার অ্যাপের সাধারণ বৈশিষ্ট্য এবং আচরণ প্রোটোটাইপিং এবং পরীক্ষা করার পাশাপাশি, আপনি ইউনিট পরীক্ষা লিখতে পারেন যা আপনার Cloud Firestore Security Rules আচরণ পরীক্ষা করে।

দ্রুত শুরু

সহজ নিয়ম সহ কয়েকটি মৌলিক পরীক্ষার ক্ষেত্রে, দ্রুত শুরুর নমুনাটি ব্যবহার করে দেখুন।

Cloud Firestore Security Rules বুঝুন

মোবাইল এবং ওয়েব ক্লায়েন্ট লাইব্রেরি ব্যবহার করার সময় সার্ভারলেস প্রমাণীকরণ, অনুমোদন এবং ডেটা যাচাইকরণের জন্য Firebase Authentication এবং Cloud Firestore Security Rules বাস্তবায়ন করুন।

Cloud Firestore Security Rules দুটি অংশ অন্তর্ভুক্ত করে:

  1. একটি match স্টেটমেন্ট যা আপনার ডাটাবেসের ডকুমেন্টগুলিকে সনাক্ত করে।
  2. একটি allow এক্সপ্রেশন যা ঐ ডকুমেন্টগুলিতে অ্যাক্সেস নিয়ন্ত্রণ করে।

Firebase Authentication ব্যবহারকারীদের শংসাপত্র যাচাই করে এবং ব্যবহারকারী-ভিত্তিক এবং ভূমিকা-ভিত্তিক অ্যাক্সেস সিস্টেমের ভিত্তি প্রদান করে।

Cloud Firestore মোবাইল/ওয়েব ক্লায়েন্ট লাইব্রেরি থেকে প্রতিটি ডাটাবেস অনুরোধ কোনও ডেটা পড়ার বা লেখার আগে আপনার সুরক্ষা নিয়ম অনুসারে মূল্যায়ন করা হয়। যদি নিয়মগুলি নির্দিষ্ট নথির কোনও পাথের অ্যাক্সেস অস্বীকার করে, তবে সম্পূর্ণ অনুরোধটি ব্যর্থ হয়।

Cloud Firestore Security Rules সম্পর্কে আরও জানুন Cloud Firestore Security Rules দিয়ে শুরু করুন" বিভাগে

এমুলেটরটি ইনস্টল করুন

Cloud Firestore এমুলেটর ইনস্টল করতে, Firebase সিএলআই ব্যবহার করুন এবং নীচের কমান্ডটি চালান:

firebase setup:emulators:firestore

এমুলেটরটি চালান

আপনার ওয়ার্কিং ডিরেক্টরিতে একটি Firebase প্রকল্প শুরু করে শুরু করুন। Firebase CLI ব্যবহার করার সময় এটি একটি সাধারণ প্রথম পদক্ষেপ।

firebase init

নিম্নলিখিত কমান্ড ব্যবহার করে এমুলেটরটি শুরু করুন। প্রক্রিয়াটি শেষ না হওয়া পর্যন্ত এমুলেটরটি চলবে:

firebase emulators:start --only firestore

অনেক ক্ষেত্রে আপনি এমুলেটরটি শুরু করতে চান, একটি টেস্ট স্যুট চালাতে চান এবং পরীক্ষাগুলি শেষ হওয়ার পরে এমুলেটরটি বন্ধ করতে চান। আপনি emulators:exec কমান্ড ব্যবহার করে এটি সহজেই করতে পারেন:

firebase emulators:exec --only firestore "./my-test-script.sh"

শুরু হলে এমুলেটরটি একটি ডিফল্ট পোর্টে (8080) চালানোর চেষ্টা করবে। আপনি আপনার firebase.json ফাইলের "emulators" বিভাগটি পরিবর্তন করে এমুলেটর পোর্টটি পরিবর্তন করতে পারেন:

{
  // ...
  "emulators": {
    "firestore": {
      "port": "YOUR_PORT"
    }
  }
}

এমুলেটর চালানোর আগে

এমুলেটর ব্যবহার শুরু করার আগে, নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

  • এমুলেটরটি প্রাথমিকভাবে আপনার firebase.json ফাইলের firestore.rules ক্ষেত্রে উল্লেখিত নিয়মগুলি লোড করবে। এটি আপনার Cloud Firestore Security Rules ধারণকারী একটি স্থানীয় ফাইলের নাম আশা করে এবং সমস্ত প্রকল্পে এই নিয়মগুলি প্রয়োগ করে। যদি আপনি স্থানীয় ফাইল পাথ প্রদান না করেন বা নীচে বর্ণিত loadFirestoreRules পদ্ধতি ব্যবহার না করেন, তাহলে এমুলেটরটি সমস্ত প্রকল্পকে খোলা নিয়ম হিসাবে বিবেচনা করে।
  • যদিও বেশিরভাগ Firebase SDK সরাসরি এমুলেটরগুলির সাথে কাজ করে, শুধুমাত্র @firebase/rules-unit-testing লাইব্রেরি নিরাপত্তা নিয়মে মকিং auth সমর্থন করে, যা ইউনিট পরীক্ষাগুলিকে অনেক সহজ করে তোলে। এছাড়াও, লাইব্রেরি নীচে তালিকাভুক্ত সমস্ত ডেটা সাফ করার মতো কয়েকটি এমুলেটর-নির্দিষ্ট বৈশিষ্ট্য সমর্থন করে।
  • এমুলেটরগুলি ক্লায়েন্ট SDK-এর মাধ্যমে প্রদত্ত প্রোডাকশন ফায়ারবেস অথ টোকেনগুলিও গ্রহণ করবে এবং সেই অনুযায়ী নিয়মগুলি মূল্যায়ন করবে, যা ইন্টিগ্রেশন এবং ম্যানুয়াল পরীক্ষায় আপনার অ্যাপ্লিকেশনটিকে সরাসরি এমুলেটরগুলির সাথে সংযুক্ত করার অনুমতি দেয়।

স্থানীয় ইউনিট পরীক্ষা চালান

v9 JavaScript SDK দিয়ে স্থানীয় ইউনিট পরীক্ষা চালান

Firebase তার সংস্করণ 9 JavaScript SDK এবং সংস্করণ 8 SDK উভয়ের সাথে একটি নিরাপত্তা নিয়ম ইউনিট টেস্টিং লাইব্রেরি বিতরণ করে। লাইব্রেরি API গুলি উল্লেখযোগ্যভাবে আলাদা। আমরা v9 টেস্টিং লাইব্রেরি সুপারিশ করি, যা আরও স্ট্রিমলাইনড এবং এমুলেটরগুলির সাথে সংযোগ স্থাপনের জন্য কম সেটআপের প্রয়োজন হয় এবং এইভাবে নিরাপদে উৎপাদন সংস্থানগুলির দুর্ঘটনাজনিত ব্যবহার এড়াতে পারে। পিছনের দিকে সামঞ্জস্যের জন্য, আমরা v8 টেস্টিং লাইব্রেরি উপলব্ধ করে চলেছি।

স্থানীয়ভাবে চলমান এমুলেটরের সাথে ইন্টারঅ্যাক্ট করতে @firebase/rules-unit-testing মডিউলটি ব্যবহার করুন। যদি আপনি টাইমআউট বা ECONNREFUSED ত্রুটি পান, তাহলে এমুলেটরটি আসলে চলছে কিনা তা দুবার পরীক্ষা করুন।

আমরা দৃঢ়ভাবে Node.js এর সাম্প্রতিক সংস্করণটি ব্যবহার করার পরামর্শ দিচ্ছি যাতে আপনি async/await নোটেশন ব্যবহার করতে পারেন। আপনি যে আচরণগুলি পরীক্ষা করতে চান তার প্রায় সমস্তই অ্যাসিঙ্ক্রোনাস ফাংশনের সাথে জড়িত, এবং টেস্টিং মডিউলটি প্রতিশ্রুতি-ভিত্তিক কোডের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে।

v9 রুলস ইউনিট টেস্টিং লাইব্রেরি সর্বদা এমুলেটর সম্পর্কে সচেতন থাকে এবং কখনও আপনার উৎপাদন সংস্থানগুলিকে স্পর্শ করে না।

আপনি v9 মডুলার ইম্পোর্ট স্টেটমেন্ট ব্যবহার করে লাইব্রেরিটি আমদানি করতে পারেন। উদাহরণস্বরূপ:

import {
  assertFails,
  assertSucceeds,
  initializeTestEnvironment
} from "@firebase/rules-unit-testing"

// Use `const { … } = require("@firebase/rules-unit-testing")` if imports are not supported
// Or we suggest `const testing = require("@firebase/rules-unit-testing")` if necessary.

একবার আমদানি করা হলে, ইউনিট পরীক্ষা বাস্তবায়নের মধ্যে রয়েছে:

  • initializeTestEnvironment কল করে একটি RulesTestEnvironment তৈরি এবং কনফিগার করা।
  • নিয়মগুলি ট্রিগার না করেই পরীক্ষার ডেটা সেট আপ করা, একটি সুবিধাজনক পদ্ধতি ব্যবহার করে যা আপনাকে সাময়িকভাবে সেগুলিকে বাইপাস করতে দেয়, RulesTestEnvironment.withSecurityRulesDisabled
  • RulesTestEnvironment.cleanup() অথবা RulesTestEnvironment.clearFirestore() এর মতো পরীক্ষার ডেটা এবং পরিবেশ পরিষ্কার করার জন্য কল সহ পরীক্ষার স্যুট এবং প্রতি-পরীক্ষার আগে/পরে হুক সেট আপ করা।
  • RulesTestEnvironment.authenticatedContext এবং RulesTestEnvironment.unauthenticatedContext ব্যবহার করে প্রমাণীকরণের অবস্থা অনুকরণ করে এমন পরীক্ষার কেস বাস্তবায়ন করা।

সাধারণ পদ্ধতি এবং ইউটিলিটি ফাংশন

v9 SDK-তে এমুলেটর-নির্দিষ্ট পরীক্ষা পদ্ধতিগুলিও দেখুন।

initializeTestEnvironment() => RulesTestEnvironment

এই ফাংশনটি রুলস ইউনিট টেস্টিংয়ের জন্য একটি টেস্ট এনভায়রনমেন্ট শুরু করে। টেস্ট সেটআপের জন্য প্রথমে এই ফাংশনটিকে কল করুন। সফলভাবে সম্পাদনের জন্য এমুলেটরগুলি চলমান থাকা প্রয়োজন।

ফাংশনটি একটি ঐচ্ছিক অবজেক্ট গ্রহণ করে যা একটি TestEnvironmentConfig সংজ্ঞায়িত করে, যার মধ্যে একটি প্রজেক্ট আইডি এবং এমুলেটর কনফিগারেশন সেটিংস থাকতে পারে।

let testEnv = await initializeTestEnvironment({
  projectId: "demo-project-1234",
  firestore: {
    rules: fs.readFileSync("firestore.rules", "utf8"),
  },
});

RulesTestEnvironment.authenticatedContext({ user_id: string, tokenOptions?: TokenOptions }) => RulesTestContext

এই পদ্ধতিটি একটি RulesTestContext তৈরি করে, যা একটি প্রমাণিত প্রমাণীকরণ ব্যবহারকারীর মতো আচরণ করে। ফিরে আসা প্রেক্ষাপটের মাধ্যমে তৈরি অনুরোধগুলিতে একটি মক প্রমাণীকরণ টোকেন সংযুক্ত থাকবে। ঐচ্ছিকভাবে, প্রমাণীকরণ টোকেন পেলোডের জন্য কাস্টম দাবি বা ওভাররাইড সংজ্ঞায়িত একটি বস্তু পাস করুন।

আপনার পরীক্ষাগুলিতে ফিরে আসা টেস্ট কনটেক্সট অবজেক্টটি ব্যবহার করে কনফিগার করা যেকোনো এমুলেটর ইনস্ট্যান্স অ্যাক্সেস করুন, যার মধ্যে initializeTestEnvironment দিয়ে কনফিগার করা ইনস্ট্যান্সও রয়েছে।

// Assuming a Firestore app and the Firestore emulator for this example
import { setDoc } from "firebase/firestore";

const alice = testEnv.authenticatedContext("alice", {  });
// Use the Firestore instance associated with this context
await assertSucceeds(setDoc(alice.firestore().doc('/users/alice'), { ... });

RulesTestEnvironment.unauthenticatedContext() => RulesTestContext

এই পদ্ধতিটি একটি RulesTestContext তৈরি করে, যা এমন একটি ক্লায়েন্টের মতো আচরণ করে যা প্রমাণীকরণের মাধ্যমে লগ ইন করা হয়নি। ফেরত প্রেক্ষাপটের মাধ্যমে তৈরি অনুরোধগুলিতে Firebase Auth টোকেন সংযুক্ত থাকবে না।

আপনার পরীক্ষাগুলিতে ফিরে আসা টেস্ট কনটেক্সট অবজেক্টটি ব্যবহার করে কনফিগার করা যেকোনো এমুলেটর ইনস্ট্যান্স অ্যাক্সেস করুন, যার মধ্যে initializeTestEnvironment দিয়ে কনফিগার করা ইনস্ট্যান্সও রয়েছে।

// Assuming a Cloud Storage app and the Storage emulator for this example
import { getStorage, ref, deleteObject } from "firebase/storage";

const alice = testEnv.unauthenticatedContext();

// Use the Cloud Storage instance associated with this context
const desertRef = ref(alice.storage(), 'images/desert.jpg');
await assertSucceeds(deleteObject(desertRef));

RulesTestEnvironment.withSecurityRulesDisabled()

এমন একটি কনটেক্সট সহ একটি টেস্ট সেটআপ ফাংশন চালান যা এমন আচরণ করে যেন নিরাপত্তা নিয়মগুলি অক্ষম করা হয়েছে।

এই পদ্ধতিটি একটি কলব্যাক ফাংশন গ্রহণ করে, যা সুরক্ষা-নিয়ম-বাইপাসিং প্রসঙ্গ গ্রহণ করে এবং একটি প্রতিশ্রুতি প্রদান করে। প্রতিশ্রুতি সমাধান / প্রত্যাখ্যান করার পরে প্রসঙ্গটি ধ্বংস হয়ে যাবে।

RulesTestEnvironment.cleanup()

এই পদ্ধতিটি পরীক্ষার পরিবেশে তৈরি সমস্ত RulesTestContexts ধ্বংস করে এবং অন্তর্নিহিত রিসোর্সগুলি পরিষ্কার করে, একটি পরিষ্কার প্রস্থানের অনুমতি দেয়।

এই পদ্ধতিটি কোনওভাবেই এমুলেটরের অবস্থা পরিবর্তন করে না। পরীক্ষার মধ্যে ডেটা রিসেট করতে, অ্যাপ্লিকেশন এমুলেটর-নির্দিষ্ট ক্লিয়ার ডেটা পদ্ধতি ব্যবহার করুন।

assertSucceeds(pr: Promise<any>)) => Promise<any>

এটি একটি টেস্ট কেস ইউটিলিটি ফাংশন।

ফাংশনটি দাবি করে যে সরবরাহকৃত প্রতিশ্রুতি মোড়ানো একটি এমুলেটর অপারেশন কোনও সুরক্ষা নিয়ম লঙ্ঘন ছাড়াই সমাধান করা হবে।

await assertSucceeds(setDoc(alice.firestore(), '/users/alice'), { ... });

assertFails(pr: Promise<any>)) => Promise<any>

এটি একটি টেস্ট কেস ইউটিলিটি ফাংশন।

ফাংশনটি দাবি করে যে সরবরাহকৃত প্রতিশ্রুতি মোড়ানো একটি এমুলেটর অপারেশন নিরাপত্তা নিয়ম লঙ্ঘনের সাথে প্রত্যাখ্যান করা হবে।

await assertFails(setDoc(alice.firestore(), '/users/bob'), { ... });

এমুলেটর-নির্দিষ্ট পদ্ধতি

v9 SDK-তে সাধারণ পরীক্ষা পদ্ধতি এবং ইউটিলিটি ফাংশনগুলিও দেখুন।

RulesTestEnvironment.clearFirestore() => Promise<void>

এই পদ্ধতিটি ফায়ারস্টোর ডাটাবেসের ডেটা সাফ করে যা ফায়ারস্টোর এমুলেটরের জন্য কনফিগার করা projectId অন্তর্গত।

RulesTestContext.firestore(settings?: Firestore.FirestoreSettings) => Firestore;

এই পদ্ধতিটি এই পরীক্ষার প্রেক্ষাপটের জন্য একটি Firestore ইনস্ট্যান্স পায়। ফিরে আসা Firebase JS ক্লায়েন্ট SDK ইনস্ট্যান্সটি ক্লায়েন্ট SDK API (v9 মডুলার বা v9 compat) এর সাথে ব্যবহার করা যেতে পারে।

নিয়ম মূল্যায়ন কল্পনা করুন

Cloud Firestore এমুলেটর আপনাকে এমুলেটর স্যুট UI-তে ক্লায়েন্টের অনুরোধগুলি কল্পনা করতে দেয়, যার মধ্যে ফায়ারবেস সুরক্ষা নিয়মের মূল্যায়ন ট্রেসিং অন্তর্ভুক্ত।

প্রতিটি অনুরোধের বিস্তারিত মূল্যায়ন ক্রম দেখতে Firestore > Requests ট্যাবটি খুলুন।

ফায়ারস্টোর এমুলেটর নিরাপত্তা নিয়ম মূল্যায়ন দেখানোর জন্য মনিটরের অনুরোধ করে

পরীক্ষার রিপোর্ট তৈরি করুন

একাধিক পরীক্ষা চালানোর পর, আপনি পরীক্ষার কভারেজ রিপোর্টগুলি অ্যাক্সেস করতে পারবেন যা দেখায় যে আপনার প্রতিটি নিরাপত্তা নিয়ম কীভাবে মূল্যায়ন করা হয়েছিল।

রিপোর্ট পেতে, এমুলেটরটি চলাকালীন একটি উন্মুক্ত এন্ডপয়েন্ট অনুসন্ধান করুন। ব্রাউজার-বান্ধব সংস্করণের জন্য, নিম্নলিখিত URL ব্যবহার করুন:

http://localhost:8080/emulator/v1/projects/<project_id>:ruleCoverage.html

এটি আপনার নিয়মগুলিকে এক্সপ্রেশন এবং সাবএক্সপ্রেশনে বিভক্ত করে, যেগুলি থেকে আপনি আরও তথ্যের জন্য মাউসওভার করতে পারেন, যার মধ্যে মূল্যায়নের সংখ্যা এবং ফেরত দেওয়া মান অন্তর্ভুক্ত। এই ডেটার raw JSON ভার্সনের জন্য, আপনার কোয়েরিতে নিম্নলিখিত URLটি অন্তর্ভুক্ত করুন:

http://localhost:8080/emulator/v1/projects/<project_id>:ruleCoverage

এমুলেটর এবং উৎপাদনের মধ্যে পার্থক্য

  1. আপনাকে স্পষ্টভাবে একটি Cloud Firestore প্রকল্প তৈরি করতে হবে না। এমুলেটরটি স্বয়ংক্রিয়ভাবে অ্যাক্সেস করা যেকোনো উদাহরণ তৈরি করে।
  2. Cloud Firestore এমুলেটরটি সাধারণ Firebase Authentication প্রবাহের সাথে কাজ করে না। পরিবর্তে, ফায়ারবেস টেস্ট SDK-তে, আমরা rules-unit-testing লাইব্রেরিতে initializeTestApp() পদ্ধতিটি প্রদান করেছি, যা একটি auth ক্ষেত্র নেয়। এই পদ্ধতি ব্যবহার করে তৈরি করা Firebase হ্যান্ডেলটি এমন আচরণ করবে যেন এটি আপনার প্রদত্ত যেকোনো সত্তা হিসাবে সফলভাবে প্রমাণীকরণ করা হয়েছে। আপনি যদি null পাস করেন, তাহলে এটি একটি অপ্রমাণিত ব্যবহারকারী হিসাবে আচরণ করবে (উদাহরণস্বরূপ, auth != null নিয়মগুলি ব্যর্থ হবে)।

জ্ঞাত সমস্যাগুলির সমাধান করুন

Cloud Firestore এমুলেটর ব্যবহার করার সময়, আপনি নিম্নলিখিত জ্ঞাত সমস্যাগুলির সম্মুখীন হতে পারেন। আপনার যেকোনো অনিয়মিত আচরণের সমস্যা সমাধানের জন্য নীচের নির্দেশিকা অনুসরণ করুন। এই নোটগুলি সুরক্ষা নিয়ম ইউনিট টেস্টিং লাইব্রেরি মাথায় রেখে লেখা হয়েছে, তবে সাধারণ পদ্ধতিগুলি যেকোনো ফায়ারবেস SDK-এর ক্ষেত্রে প্রযোজ্য।

পরীক্ষার আচরণ অসঙ্গত।

যদি আপনার পরীক্ষাগুলি মাঝে মাঝে পাস করে এবং ব্যর্থ হয়, এমনকি পরীক্ষাগুলিতে কোনও পরিবর্তন না করেও, তাহলে আপনাকে যাচাই করতে হতে পারে যে সেগুলি সঠিকভাবে সিকোয়েন্স করা হয়েছে। এমুলেটরের সাথে বেশিরভাগ ইন্টারঅ্যাকশন অ্যাসিঙ্ক্রোনাস হয়, তাই সমস্ত অ্যাসিঙ্ক কোড সঠিকভাবে সিকোয়েন্স করা হয়েছে কিনা তা দুবার পরীক্ষা করুন। আপনি প্রতিশ্রুতি চেইন করে, অথবা উদারভাবে await নোটেশন ব্যবহার করে সিকোয়েন্সিং ঠিক করতে পারেন।

বিশেষ করে, নিম্নলিখিত অ্যাসিঙ্ক ক্রিয়াকলাপগুলি পর্যালোচনা করুন:

  • নিরাপত্তা নিয়ম সেট করা, উদাহরণস্বরূপ, initializeTestEnvironment সহ।
  • উদাহরণস্বরূপ, db.collection("users").doc("alice").get() ব্যবহার করে ডেটা পড়া এবং লেখা।
  • assertSucceeds এবং assertFails সহ কার্যকরী দাবি।

প্রথমবার এমুলেটর লোড করার সময়ই পরীক্ষাগুলি পাস হয়।

এমুলেটরটি স্টেটফুল। এটি এতে লেখা সমস্ত ডেটা মেমোরিতে সংরক্ষণ করে, তাই এমুলেটরটি বন্ধ হয়ে গেলে যেকোনো ডেটা হারিয়ে যায়। যদি আপনি একই প্রজেক্ট আইডির বিরুদ্ধে একাধিক পরীক্ষা চালান, তাহলে প্রতিটি পরীক্ষা এমন ডেটা তৈরি করতে পারে যা পরবর্তী পরীক্ষাগুলিকে প্রভাবিত করতে পারে। এই আচরণটি এড়াতে আপনি নিম্নলিখিত যেকোনো পদ্ধতি ব্যবহার করতে পারেন:

  • প্রতিটি পরীক্ষার জন্য অনন্য প্রকল্প আইডি ব্যবহার করুন। মনে রাখবেন যে আপনি যদি এটি করতে চান তবে আপনাকে প্রতিটি পরীক্ষার অংশ হিসাবে initializeTestEnvironment কল করতে হবে; নিয়মগুলি কেবলমাত্র ডিফল্ট প্রকল্প আইডির জন্য স্বয়ংক্রিয়ভাবে লোড হয়।
  • আপনার পরীক্ষাগুলি পুনর্গঠন করুন যাতে তারা পূর্বে লিখিত তথ্যের সাথে ইন্টারঅ্যাক্ট না করে (উদাহরণস্বরূপ, প্রতিটি পরীক্ষার জন্য একটি ভিন্ন সংগ্রহ ব্যবহার করুন)।
  • পরীক্ষার সময় লেখা সমস্ত তথ্য মুছে ফেলুন।

পরীক্ষার সেটআপ খুবই জটিল

আপনার পরীক্ষা সেট আপ করার সময়, আপনি এমনভাবে ডেটা পরিবর্তন করতে চাইতে পারেন যা আপনার Cloud Firestore Security Rules আসলে অনুমোদন করে না। যদি আপনার নিয়মগুলি পরীক্ষা সেটআপকে জটিল করে তোলে, তাহলে আপনার সেটআপ ধাপগুলিতে RulesTestEnvironment.withSecurityRulesDisabled ব্যবহার করে দেখুন, যাতে পঠন এবং লেখার ফলে PERMISSION_DENIED ত্রুটি না হয়।

এরপর, আপনার পরীক্ষাটি যথাক্রমে RulesTestEnvironment.authenticatedContext এবং unauthenticatedContext ব্যবহার করে একজন প্রমাণিত বা অপ্রমাণিত ব্যবহারকারী হিসেবে ক্রিয়াকলাপ সম্পাদন করতে পারে। এটি আপনাকে যাচাই করতে দেয় যে আপনার Cloud Firestore Security Rules বিভিন্ন ক্ষেত্রে সঠিকভাবে অনুমতি দেয় / অস্বীকার করে।