ফায়ারবেস আপনাকে আপনার Security Rules পরিচালনা করার জন্য বেশ কিছু টুল প্রদান করে, যার প্রতিটিই নির্দিষ্ট ক্ষেত্রে উপযোগী এবং প্রতিটিই একই ব্যাকএন্ড ফায়ারবেস সিকিউরিটি রুলস ম্যানেজমেন্ট এপিআই ব্যবহার করে।
এটিকে আহ্বান করার জন্য যে টুলই ব্যবহার করা হোক না কেন, ম্যানেজমেন্ট এপিআই:
- একটি রুলস সোর্স গ্রহণ করে: একগুচ্ছ নিয়ম, যা সাধারণত একটি কোড ফাইল এবং এতে Firebase Security Rules স্টেটমেন্ট থাকে।
- গৃহীত উৎসকে একটি অপরিবর্তনীয় নিয়মাবলী সেট হিসাবে সংরক্ষণ করে।
- একটি রিলিজে প্রতিটি রুলসেটের ডেপ্লয়মেন্ট ট্র্যাক করে। ফায়ারবেস সিকিউরিটি রুলস-সক্ষম সার্ভিসগুলো একটি সুরক্ষিত রিসোর্সের জন্য প্রতিটি অনুরোধ মূল্যায়ন করতে কোনো প্রজেক্টের রিলিজটি খুঁজে দেখে।
- একটি নিয়ম সেটের বাক্যগঠনগত এবং অর্থগত পরীক্ষা চালানোর সক্ষমতা প্রদান করে।
Firebase সিএলআই ব্যবহার করুন
Firebase CLI ব্যবহার করে আপনি লোকাল সোর্স আপলোড করতে এবং রিলিজ ডেপ্লয় করতে পারেন। CLI-এর Firebase Local Emulator Suite আপনাকে সোর্সগুলোর সম্পূর্ণ লোকাল টেস্টিং করার সুযোগ দেয়।
CLI ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশন কোডের সাথে নিয়মগুলোকে ভার্সন কন্ট্রোলের অধীনে রাখতে পারেন এবং আপনার বিদ্যমান ডেপ্লয়মেন্ট প্রক্রিয়ার অংশ হিসেবে নিয়মগুলো ডেপ্লয় করতে পারেন।
একটি কনফিগারেশন ফাইল তৈরি করুন
আপনি যখন Firebase CLI ব্যবহার করে আপনার Firebase প্রজেক্ট কনফিগার করেন, তখন আপনার প্রজেক্ট ডিরেক্টরিতে একটি .rules কনফিগারেশন ফাইল তৈরি হয়। আপনার Firebase প্রজেক্ট কনফিগার করা শুরু করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
Cloud Firestore
// Set up Firestore in your project directory, creates a .rules file firebase init firestore
Realtime Database
// Set up Realtime Database in your project directory, creates a .rules file firebase init database
Cloud Storage
// Set up Storage in your project directory, creates a .rules file firebase init storage
আপনার নিয়মগুলো সম্পাদনা ও হালনাগাদ করুন
আপনার নিয়মের উৎস সরাসরি .rules কনফিগারেশন ফাইলে সম্পাদনা করুন।
নিশ্চিত করুন যে Firebase CLI-তে আপনার করা যেকোনো সম্পাদনা যেন Firebase কনসোলে প্রতিফলিত হয়, অথবা আপনি নিয়মিতভাবে Firebase কনসোল বা Firebase CLI ব্যবহার করে আপডেট করেন। অন্যথায়, Firebase কনসোলে করা যেকোনো আপডেট ওভাররাইট হয়ে যেতে পারে।
আপনার আপডেটগুলি পরীক্ষা করুন
Local Emulator Suite সকল সিকিউরিটি রুলস-সক্ষম প্রোডাক্টের জন্য এমুলেটর সরবরাহ করে। প্রতিটি এমুলেটরের সিকিউরিটি রুলস ইঞ্জিন রুলগুলোর সিনট্যাকটিক এবং সিমান্টিক উভয় প্রকার মূল্যায়ন সম্পাদন করে, যার ফলে এটি সিকিউরিটি রুলস ম্যানেজমেন্ট এপিআই দ্বারা প্রদত্ত সিনট্যাকটিক টেস্টিংকে ছাড়িয়ে যায়।
আপনি যদি CLI ব্যবহার করে কাজ করেন, Firebase Security Rules পরীক্ষা করার জন্য Suite-টি একটি চমৎকার টুল। আপনার আপডেটগুলো স্থানীয়ভাবে পরীক্ষা করতে এবং আপনার অ্যাপের Security Rules আপনার কাঙ্ক্ষিত আচরণ প্রদর্শন করছে কিনা তা নিশ্চিত করতে Local Emulator Suite ব্যবহার করুন।
আপনার আপডেটগুলি স্থাপন করুন
আপনার Security Rules আপডেট ও পরীক্ষা করা হয়ে গেলে, সোর্সগুলো প্রোডাকশনে ডেপ্লয় করুন।
Cloud Firestore Security Rules জন্য, আপনার firebase.json ফাইলটি পর্যালোচনা ও আপডেট করে আপনার ডিফল্ট এবং অতিরিক্ত নামযুক্ত ডেটাবেসগুলির সাথে .rules ফাইলগুলিকে সংযুক্ত করুন।
আপনার Security Rules বেছে বেছে এককভাবে প্রয়োগ করতে অথবা আপনার স্বাভাবিক প্রয়োগ প্রক্রিয়ার অংশ হিসেবে প্রয়োগ করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন।
Cloud Firestore
// Deploy rules for all databases configured in your firebase.json firebase deploy --only firestore:rules
// Deploy rules for the specified database configured in your firebase.json firebase deploy --only firestore:<databaseId>
Realtime Database
// Deploy your .rules file firebase deploy --only database
Cloud Storage
// Deploy your .rules file firebase deploy --only storage
Firebase কনসোল ব্যবহার করুন
আপনি Firebase কনসোল থেকে Security Rules সোর্সগুলো সম্পাদনা করতে এবং রিলিজ হিসেবে স্থাপন করতে পারেন। Firebase কনসোল UI-তে সম্পাদনা করার সময় সিনট্যাকটিক টেস্টিং করা হয়, এবং Security Rules প্লেগ্রাউন্ড ব্যবহার করে সিমান্টিক টেস্টিং করা যায়।
আপনার নিয়মগুলো সম্পাদনা ও হালনাগাদ করুন
- Firebase কনসোল খুলুন এবং আপনার প্রজেক্টটি নির্বাচন করুন।
- এরপর, প্রোডাক্ট নেভিগেশন থেকে Realtime Database , Cloud Firestore বা স্টোরেজ নির্বাচন করুন, তারপর Security Rules এডিটরে যাওয়ার জন্য রুলস-এ ক্লিক করুন।
- আপনার নিয়মগুলো সরাসরি এডিটরে সম্পাদনা করুন।
আপনার আপডেটগুলি পরীক্ষা করুন
এডিটর UI-তে সিনট্যাক্স পরীক্ষা করার পাশাপাশি, আপনি আপনার প্রোজেক্টের ডাটাবেস এবং স্টোরেজ রিসোর্স ব্যবহার করে সরাসরি Firebase কনসোলে ' Security Rules প্লেগ্রাউন্ড' ব্যবহার করে সিমান্টিক Security Rules আচরণ পরীক্ষা করতে পারেন। Security Rules এডিটর'-এ 'রুলস প্লেগ্রাউন্ড' স্ক্রিনটি খুলুন, সেটিংস পরিবর্তন করুন এবং 'রান' (Run ) ক্লিক করুন। এডিটরের উপরের দিকে থাকা কনফার্মেশন মেসেজটি দেখুন।
আপনার আপডেটগুলি স্থাপন করুন
আপনার আপডেটগুলো প্রত্যাশা অনুযায়ী হয়েছে বলে আপনি সন্তুষ্ট হলে, 'প্রকাশ করুন' (Publish) বোতামে ক্লিক করুন।
অ্যাডমিন এসডিকে ব্যবহার করুন
আপনি Node.js রুলসেটগুলোর জন্য Admin SDK ব্যবহার করতে পারেন। এই প্রোগ্রাম্যাটিক অ্যাক্সেসের মাধ্যমে, আপনি যা করতে পারবেন:
- নিয়মাবলী ব্যবস্থাপনার জন্য নিজস্ব টুল, স্ক্রিপ্ট, ড্যাশবোর্ড এবং CI/CD পাইপলাইন প্রয়োগ করুন।
- একাধিক ফায়ারবেস প্রজেক্ট জুড়ে নিয়মগুলি আরও সহজে পরিচালনা করুন।
প্রোগ্রামের মাধ্যমে নিয়ম আপডেট করার সময়, আপনার অ্যাপের অ্যাক্সেস কন্ট্রোলে অনাকাঙ্ক্ষিত পরিবর্তন করা থেকে বিরত থাকা অত্যন্ত গুরুত্বপূর্ণ। নিরাপত্তাকে সর্বাগ্রে রেখে আপনার Admin SDK কোড লিখুন, বিশেষ করে নিয়ম আপডেট বা ডেপ্লয় করার সময়।
আরেকটি গুরুত্বপূর্ণ বিষয় মনে রাখতে হবে যে, Firebase Security Rules রিলিজগুলো সম্পূর্ণরূপে কার্যকর হতে কয়েক মিনিট সময় লাগে। Admin SDK ব্যবহার করে রুলগুলো ডেপ্লয় করার সময়, এমন রেস কন্ডিশন (race conditions) এড়িয়ে চলুন যেখানে আপনার অ্যাপ তাৎক্ষণিকভাবে এমন রুলের উপর নির্ভর করে যার ডেপ্লয়মেন্ট এখনও সম্পূর্ণ হয়নি। যদি আপনার ব্যবহারের ক্ষেত্রে অ্যাক্সেস কন্ট্রোল রুলগুলোতে ঘন ঘন আপডেটের প্রয়োজন হয়, তবে Cloud Firestore ব্যবহার করে সমাধানগুলো বিবেচনা করুন, যা ঘন ঘন আপডেট সত্ত্বেও রেস কন্ডিশন কমানোর জন্য ডিজাইন করা হয়েছে।
এই সীমাগুলোও লক্ষ্য করুন:
- সিরিয়ালাইজ করার পর রুলগুলো অবশ্যই ২৫৬ কিলোবাইট (KiB) এর চেয়ে ছোট UTF-8 এনকোডেড টেক্সট হতে হবে।
- একটি প্রজেক্টে সর্বাধিক ২৫০০টি ডেপ্লয়েড রুলসেট থাকতে পারে। এই সীমায় পৌঁছে গেলে, নতুন রুলসেট তৈরি করার আগে আপনাকে অবশ্যই কিছু পুরোনো রুলসেট ডিলিট করতে হবে।
Cloud Storage বা Cloud Firestore রুলসেট তৈরি এবং স্থাপন করুন
Admin SDK ব্যবহার করে নিরাপত্তা বিধি ব্যবস্থাপনার একটি সাধারণ কার্যপ্রবাহে তিনটি স্বতন্ত্র ধাপ অন্তর্ভুক্ত থাকতে পারে:
- একটি নিয়ম ফাইলের উৎস তৈরি করুন (ঐচ্ছিক)
- একটি নিয়মাবলী তৈরি করুন
- নতুন নিয়মাবলী প্রকাশ বা প্রয়োগ করুন
Cloud Storage এবং Cloud Firestore নিরাপত্তা নিয়মের জন্য এই ধাপগুলোকে একটিমাত্র এপিআই কলে একত্রিত করার একটি পদ্ধতি এসডিকে-তে রয়েছে। উদাহরণস্বরূপ:
const source = `service cloud.firestore {
match /databases/{database}/documents {
match /carts/{cartID} {
allow create: if request.auth != null && request.auth.uid == request.resource.data.ownerUID;
allow read, update, delete: if request.auth != null && request.auth.uid == resource.data.ownerUID;
}
}
}`;
// Alternatively, load rules from a file
// const fs = require('fs');
// const source = fs.readFileSync('path/to/firestore.rules', 'utf8');
await admin.securityRules().releaseFirestoreRulesetFromSource(source);
এই একই প্যাটার্ন releaseFirestoreRulesetFromSource() সহ Cloud Storage নিয়মের ক্ষেত্রেও কাজ করে।
বিকল্পভাবে, এই ইভেন্টগুলোর উপর আরও নিবিড় নিয়ন্ত্রণের জন্য আপনি রুলস ফাইলটিকে একটি ইন-মেমরি অবজেক্ট হিসেবে তৈরি করতে পারেন, রুলসেটটি তৈরি করতে পারেন এবং রুলসেটটি আলাদাভাবে ডিপ্লয় করতে পারেন। উদাহরণস্বরূপ:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
Realtime Database নিয়মাবলী আপডেট করুন
Admin SDK ব্যবহার করে Realtime Database রুলসেট আপডেট করতে, admin.database এর getRules() এবং setRules() মেথডগুলো ব্যবহার করুন। আপনি JSON ফরম্যাটে অথবা কমেন্টসহ স্ট্রিং হিসেবে রুলসেটগুলো পেতে পারেন।
একটি নিয়মাবলী সেট আপডেট করতে:
const source = `{
"rules": {
"scores": {
".indexOn": "score",
"$uid": {
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
}
}
}`;
await admin.database().setRules(source);
নিয়মাবলী পরিচালনা করুন
বৃহৎ রুলসেট পরিচালনা করতে সাহায্য করার জন্য, Admin SDK আপনাকে admin.securityRules().listRulesetMetadata ব্যবহার করে বিদ্যমান সমস্ত রুলের তালিকা দেখতে দেয়। উদাহরণস্বরূপ:
const allRulesets = [];
let pageToken = null;
while (true) {
const result = await admin.securityRules().listRulesetMetadata(pageToken: pageToken);
allRulesets.push(...result.rulesets);
pageToken = result.nextPageToken;
if (!pageToken) {
break;
}
}
খুব বড় ডেপ্লয়মেন্টের ক্ষেত্রে, যা সময়ের সাথে সাথে ২৫০০ রুলসেটের সীমায় পৌঁছে যায়, আপনি একটি নির্দিষ্ট সময় অন্তর সবচেয়ে পুরোনো রুলগুলো মুছে ফেলার জন্য লজিক তৈরি করতে পারেন। উদাহরণস্বরূপ, ৩০ দিনের বেশি সময় ধরে ডেপ্লয় করা সমস্ত রুলসেট মুছে ফেলতে:
const thirtyDays = new Date(Date.now() - THIRTY_DAYS_IN_MILLIS);
const promises = [];
allRulesets.forEach((rs) => {
if (new Date(rs.createTime) < thirtyDays) {
promises.push(admin.securityRules().deleteRuleset(rs.name));
}
});
await Promise.all(promises);
console.log(`Deleted ${promises.length} rulesets.`);
REST API ব্যবহার করুন
উপরে বর্ণিত টুলগুলো আপনার প্রোজেক্টের একাধিক Cloud Firestore ডেটাবেসের জন্য Firebase Security Rules ম্যানেজমেন্ট সহ বিভিন্ন ওয়ার্কফ্লোর জন্য বেশ উপযুক্ত, কিন্তু আপনি সরাসরি ম্যানেজমেন্ট এপিআই ব্যবহার করে Firebase Security Rules পরিচালনা ও স্থাপন করতে চাইতে পারেন। ম্যানেজমেন্ট এপিআই আপনাকে সর্বাধিক নমনীয়তা প্রদান করে।
এই সীমাগুলোও লক্ষ্য করুন:
- সিরিয়ালাইজ করার পর রুলগুলো অবশ্যই ২৫৬ কিলোবাইট (KiB) এর চেয়ে ছোট UTF-8 এনকোডেড টেক্সট হতে হবে।
- একটি প্রজেক্টে সর্বাধিক ২৫০০টি ডেপ্লয়েড রুলসেট থাকতে পারে। এই সীমায় পৌঁছে গেলে, নতুন রুলসেট তৈরি করার আগে আপনাকে অবশ্যই কিছু পুরোনো রুলসেট ডিলিট করতে হবে।
REST ব্যবহার করে Cloud Firestore বা Cloud Storage রুলসেট তৈরি এবং স্থাপন করুন
এই বিভাগের উদাহরণগুলিতে ফায়ারস্টোর Security Rules ব্যবহার করা হয়েছে, যদিও সেগুলি Cloud Storage Security Rules ক্ষেত্রেও প্রযোজ্য।
উদাহরণগুলোতে এপিআই কল করার জন্য cURL-ও ব্যবহার করা হয়েছে। অথেনটিকেশন টোকেন সেট আপ করা এবং পাস করার ধাপগুলো বাদ দেওয়া হয়েছে। আপনি রেফারেন্স ডকুমেন্টেশনের সাথে সমন্বিত এপিআই এক্সপ্লোরার ব্যবহার করে এই এপিআই নিয়ে পরীক্ষা-নিরীক্ষা করতে পারেন।
ম্যানেজমেন্ট এপিআই ব্যবহার করে একটি রুলসেট তৈরি ও স্থাপন করার সাধারণ ধাপগুলো হলো:
- নিয়ম ফাইলের উৎস তৈরি করুন
- একটি নিয়মাবলী তৈরি করুন
- নতুন নিয়মাবলীটি প্রকাশ (প্রয়োগ) করুন।
একটি উৎস তৈরি করুন
ধরা যাক, আপনি আপনার secure_commerce Firebase প্রজেক্টে কাজ করছেন এবং আপনার প্রজেক্টের east_store নামের একটি ডেটাবেসে সুরক্ষিত Cloud Firestore Security Rules Cloud Firestore Security Rules) প্রয়োগ করতে চান।
আপনি firestore.rules ফাইলে এই নিয়মগুলো প্রয়োগ করতে পারেন।
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
একটি নিয়মাবলী তৈরি করুন
এখন, এই ফাইলটির জন্য একটি বেস৬৪-এনকোডেড ফিঙ্গারপ্রিন্ট তৈরি করুন। এরপর, projects.rulesets.create REST কলটির মাধ্যমে একটি রুলসেট তৈরি করার জন্য প্রয়োজনীয় পেলোডটি পূরণ করতে আপনি এই ফাইলের সোর্সটি ব্যবহার করতে পারেন। এখানে, firestore.rules ফাইলের বিষয়বস্তু REST পেলোডে যুক্ত করতে cat কমান্ডটি ব্যবহার করুন।
ট্র্যাকিংয়ের জন্য, এটিকে আপনার east_store ডাটাবেসের সাথে যুক্ত করতে, attachment_point east_store এ সেট করুন।
curl -X POST -d '{
"source": {
"files": [
{
"content": "' $(cat storage.rules) '",
"name": "firestore.rules",
"fingerprint": <sha fingerprint>
},
"attachment_point": "firestore.googleapis.com/databases/east_store"
]
}
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets'এপিআইটি একটি ভ্যালিডেশন রেসপন্স এবং একটি রুলসেটের নাম রিটার্ন করে, যেমন projects/secure_commerce/rulesets/uuid123 ।
একটি নিয়ম সেট প্রকাশ (স্থাপন) করুন
যদি নিয়মাবলী সেটটি বৈধ হয়, তবে চূড়ান্ত ধাপ হলো একটি নামযুক্ত রিলিজে নতুন নিয়মাবলী সেটটি স্থাপন করা।
curl -X POST -d '{
"name": "projects/secure_commerce/releases/cloud.firestore/east_store" ,
"rulesetName": "projects/secure_commerce/rulesets/uuid123"
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/releases'মনে রাখবেন যে Firebase Security Rules রিলিজ সম্পূর্ণরূপে কার্যকর হতে কয়েক মিনিট সময় লাগে। ম্যানেজমেন্ট REST API ব্যবহার করে ডেপ্লয় করার সময়, এমন রেস কন্ডিশন এড়িয়ে চলুন যেখানে আপনার অ্যাপ তাৎক্ষণিকভাবে এমন নিয়মের উপর নির্ভর করে যার ডেপ্লয়মেন্ট এখনও সম্পূর্ণ হয়নি।
REST ব্যবহার করে Realtime Database রুলসেট আপডেট করুন
Realtime Database Security Rules পরিচালনার জন্য নিজস্ব REST ইন্টারফেস প্রদান করে। REST-এর মাধ্যমে ফায়ারবেস Realtime Database Security Rules পরিচালনা দেখুন।
REST ব্যবহার করে রুলসেট পরিচালনা করুন
বৃহৎ আকারের রুলস ডেপ্লয়মেন্ট পরিচালনা করতে সাহায্য করার জন্য, রুলসেট এবং রিলিজ তৈরির একটি REST মেথড ছাড়াও, ম্যানেজমেন্ট API-টি নিম্নলিখিত মেথডগুলো প্রদান করে:
- নিয়ম সেটগুলির তালিকা, প্রাপ্তি এবং মুছে ফেলা
- নিয়ম রিলিজের তালিকা, প্রাপ্তি এবং মুছে ফেলা
খুব বড় ডেপ্লয়মেন্টের ক্ষেত্রে, যা সময়ের সাথে সাথে ২৫০০ রুলসেটের সীমায় পৌঁছে যায়, আপনি একটি নির্দিষ্ট সময় চক্রে সবচেয়ে পুরোনো রুলগুলো মুছে ফেলার জন্য লজিক তৈরি করতে পারেন। উদাহরণস্বরূপ, ৩০ দিনের বেশি সময় ধরে ডেপ্লয় করা সমস্ত রুলসেট মুছে ফেলার জন্য, আপনি projects.rulesets.list মেথডটি কল করতে পারেন, Ruleset অবজেক্টগুলোর JSON লিস্ট থেকে তাদের createTime কী-এর উপর ভিত্তি করে পার্স করতে পারেন, এবং তারপর ruleset_id ব্যবহার করে সংশ্লিষ্ট রুলসেটগুলোর উপর project.rulesets.delete কল করতে পারেন।
REST দিয়ে আপনার আপডেটগুলি পরীক্ষা করুন
অবশেষে, ম্যানেজমেন্ট এপিআই আপনাকে আপনার প্রোডাকশন প্রোজেক্টে Cloud Firestore এবং Cloud Storage রিসোর্সগুলোর ওপর সিনট্যাকটিক ও সিমান্টিক পরীক্ষা চালানোর সুযোগ দেয়।
এপিআই-এর এই উপাদান দিয়ে পরীক্ষা করার প্রক্রিয়াটি নিম্নরূপ:
-
TestCaseঅবজেক্টের একটি সেটকে উপস্থাপন করার জন্য একটিTestSuiteJSON অবজেক্ট সংজ্ঞায়িত করা। -
TestSuiteজমা দেওয়া - ফেরত আসা
TestResultঅবজেক্টগুলো পার্স করা হচ্ছে
চলুন testcase.json ফাইলে একটিমাত্র TestCase সহ একটি TestSuite অবজেক্ট সংজ্ঞায়িত করি। এই উদাহরণে, আমরা REST পেলোডের সাথে ইনলাইনে Security Rules ল্যাঙ্গুয়েজ সোর্স এবং সেই রুলগুলোর উপর চালানোর জন্য টেস্ট স্যুটটি পাস করি। আমরা একটি রুলস ইভ্যালুয়েশন এক্সপেক্টেশন এবং ক্লায়েন্ট রিকোয়েস্ট নির্দিষ্ট করে দিই, যার বিপরীতে রুলসেটটি পরীক্ষা করা হবে। আপনি "FULL" ভ্যালুটি ব্যবহার করে টেস্ট রিপোর্টটি কতটা সম্পূর্ণ হবে তাও নির্দিষ্ট করতে পারেন; এর মাধ্যমে বোঝানো হয় যে, রিপোর্টে সমস্ত Security Rules ল্যাঙ্গুয়েজ এক্সপ্রেশনের ফলাফল অন্তর্ভুক্ত করা হবে, এমনকি সেইসব এক্সপ্রেশনসহ যেগুলো রিকোয়েস্টের সাথে মেলেনি।
{ "source": { "files": [ { "name": "firestore.rules", "content": "service cloud.firestore { match /databases/{database}/documents { match /users/{userId}{ allow read: if (request.auth.uid == userId); } function doc(subpath) { return get(/databases/$(database)/documents/$(subpath)).data; } function isAccountOwner(accountId) { return request.auth.uid == accountId || doc(/users/$(request.auth.uid)).accountId == accountId; } match /licenses/{accountId} { allow read: if isAccountOwner(accountId); } } }" } ] }, "testSuite": { "testCases": [ { "expectation": "ALLOW", "request": { "auth": {"uid": "123"}, "path": "/databases/(default)/documents/licenses/abcd", "method": "get"}, "functionMocks": [ { "function": "get", "args": [{"exact_value": "/databases/(default)/documents/users/123"}], "result": {"value": {"data": {"accountId": "abcd"}}} } ] } ] } }
এরপর আমরা projects.test মেথড ব্যবহার করে এই TestSuite মূল্যায়নের জন্য জমা দিতে পারি।
curl -X POST -d '{
' $(cat testcase.json) '
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets/uuid123:test'ফেরত আসা TestReport (যাতে টেস্টের সফল/ব্যর্থ স্ট্যাটাস, ডিবাগ মেসেজের তালিকা, পরিদর্শিত রুলস এক্সপ্রেশনের তালিকা এবং সেগুলোর মূল্যায়ন রিপোর্ট থাকে) সফল স্ট্যাটাসের মাধ্যমে নিশ্চিত করবে যে অ্যাক্সেস যথাযথভাবে অনুমোদিত হয়েছে।
ক্রস-সার্ভিস Cloud Storage Security Rules জন্য অনুমতি পরিচালনা করুন
আপনি যদি Cloud Storage Security Rules তৈরি করেন যা নিরাপত্তার অবস্থা মূল্যায়ন করতে Cloud Firestore ডকুমেন্টের বিষয়বস্তু ব্যবহার করে, তাহলে দুটি প্রোডাক্টকে সংযুক্ত করার অনুমতি সক্রিয় করার জন্য আপনাকে Firebase কনসোল বা Firebase সিএলআই-তে অনুরোধ করা হবে।
আপনি যদি এই ধরনের ক্রস-সার্ভিস নিরাপত্তা নিষ্ক্রিয় করার সিদ্ধান্ত নেন:
প্রথমত, ফিচারটি নিষ্ক্রিয় করার আগে, আপনার নিয়মগুলো সম্পাদনা করুন এবং Cloud Firestore অ্যাক্সেস করার জন্য Security Rules ফাংশন ব্যবহার করে এমন সমস্ত স্টেটমেন্ট মুছে ফেলুন। অন্যথায়, ফিচারটি নিষ্ক্রিয় করার পরে, Security Rules মূল্যায়নের কারণে আপনার স্টোরেজ অনুরোধগুলো ব্যর্থ হবে।
রোল প্রত্যাহারের জন্য ক্লাউড গাইড অনুসরণ করে Google Cloud Console-এর IAM পেজ ব্যবহার করে 'Firebase Rules Firestore Service Agent' রোলটি ডিলিট করুন।
পরবর্তী বার যখন আপনি Firebase CLI বা Firebase কনসোল থেকে ক্রস-সার্ভিস রুলস সেভ করবেন, তখন আপনাকে ফিচারটি পুনরায় চালু করার জন্য অনুরোধ করা হবে।