এই নির্দেশিকাটি Firebase Security Rules ভাষার মূল সিনট্যাক্স শিখুন নির্দেশিকার উপর ভিত্তি করে তৈরি করা হয়েছে যাতে দেখানো যায় যে কীভাবে আপনার Cloud Storage-এর জন্য Firebase Security Rules-এ শর্ত যোগ করতে হয়।
Cloud Storage Security Rules-এর প্রাথমিক বিল্ডিং ব্লক হল শর্ত। শর্ত
হল একটি বুলিয়ান এক্সপ্রেশন যা নির্ধারণ করে যে কোনও নির্দিষ্ট অপারেশন
অনুমতি দেওয়া উচিত নাকি অস্বীকার করা উচিত। প্রাথমিক নিয়মের জন্য, শর্ত হিসেবে true এবং false লিটারেল
ব্যবহার করা খুব ভালভাবে কাজ করে। তবে Cloud Storage
ভাষার জন্য Firebase Security Rules আপনাকে আরও জটিল শর্ত লেখার উপায় দেয় যা:
- ব্যবহারকারীর পরিচয় যাচাইকরণ চেক করুন
- ইনকামিং ডেটা যাচাই করা
AI অ্যাসিস্ট্যান্সের জন্য AI প্রম্পট
AI-এর মাধ্যমে সহায়তা পেতে, নিচের প্রম্পটটি আপনার AI কোডিং এজেন্টে (যেমন, Android Studio-তে Gemini, Antigravity, Claude Code, Codex এবং Cursor) কপি করুন। আপনি প্রম্পট কাস্টমাইজ করতে এবং আপনার এজেন্টের সাথে ইটারেট করতে পারবেন। ইনস্টলেশন সংক্রান্ত বিস্তারিত তথ্যের জন্য Firebase এজেন্ট সংক্রান্ত দক্ষতা দেখুন।
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me write, validate, and deploy Firebase Security Rules to protect my app's Cloud Storage data.
যাচাইকরণ
Cloud Storage-এর জন্য Firebase Security Rules, Cloud Storage-কে শক্তিশালী ব্যবহারকারী ভিত্তিক যাচাইকরণ প্রদান করতে Firebase Authentication-এর সাথে ইন্টিগ্রেট করে। এটি Firebase Authentication টোকেনের দাবির উপর ভিত্তি করে গ্র্যানুলার অ্যাক্সেস কন্ট্রোলের অনুমতি দেয়।
যাচাই করা ব্যবহারকারী Cloud Storage-এর জন্য অনুরোধ করলে,
request.auth ভেরিয়েবল ব্যবহারকারীর uid
(request.auth.uid) এবং Firebase Authentication JWT-এর দাবি
(request.auth.token) দিয়ে পূরণ করা হয়।
এছাড়াও, কাস্টম যাচাইকরণ ব্যবহার করার সময়, request.auth.token ফিল্ডে অতিরিক্ত দাবি
দেখানো হয়।
কোনও যাচাই না করা ব্যবহারকারী অনুরোধ করলে, request.auth ভেরিয়েবলটি
null হয়।
এই ডেটা ব্যবহার করে, ফাইল সুরক্ষিত করার জন্য যাচাইকরণ ব্যবহার করার বেশ কয়েকটি সাধারণ উপায় রয়েছে:
- পাবলিক:
request.authইগনোর করুন - যাচাই করা ব্যক্তিগত: চেক করুন যে
request.auth,nullনয় - ব্যবহারকারীর ব্যক্তিগত: চেক করুন যে
request.auth.uid,uidপাথের সমান কিনা - গ্রুপ প্রাইভেট: বেছে নেওয়া দাবির সাথে ম্যাচ করার জন্য কাস্টম টোকেনের দাবি চেক করুন অথবা মেটাডেটা ফিল্ড আছে কিনা তা দেখতে ফাইল মেটাডেটা পড়ুন
সর্বজনীন
যেসব নিয়ম request.auth প্রসঙ্গ বিবেচনা করে না, সেগুলিকে public নিয়ম হিসেবে বিবেচনা করা যেতে পারে, কারণ সেগুলি ব্যবহারকারীর যাচাইকরণের প্রসঙ্গ বিবেচনা করে না।
গেম অ্যাসেট, সাউন্ড ফাইল বা অন্যান্য স্ট্যাটিক কন্টেন্টের মতো পাবলিক ডেটা দেখানোর জন্য এই নিয়মগুলি উপযোগী হতে পারে।
// Anyone to read a public image if the file is less than 100kB // Anyone can upload a public file ending in '.txt' match /public/{imageId} { allow read: if resource.size < 100 * 1024; allow write: if imageId.matches(".*\\.txt"); }
যাচাই করা ব্যক্তিগত
কিছু ক্ষেত্রে, আপনি হয়ত চাইবেন যে আপনার অ্যাপ্লিকেশনের যাচাই করা সব ব্যবহারকারী ডেটা দেখতে পাক, কিন্তু যাচাই না করা ব্যবহারকারীরা যেন তা দেখতে না পায়। যেহেতু সব যাচাই না করা ব্যবহারকারীর জন্য request.auth
ভেরিয়েবল হল null, তাই যাচাইকরণের জন্য আপনাকে শুধু
request.auth ভেরিয়েবল আছে কিনা তা চেক করতে হবে:
// Require authentication on all internal image reads match /internal/{imageId} { allow read: if request.auth != null; }
ব্যবহারকারীর ব্যক্তিগত
এখনও পর্যন্ত request.auth-এর সবচেয়ে সাধারণ ব্যবহার হল, স্বতন্ত্র ব্যবহারকারীদের
তাদের ফাইলের উপর গ্র্যানুলার অনুমতি প্রদান করা: প্রোফাইল ছবি আপলোড করা থেকে শুরু করে
ব্যক্তিগত ডকুমেন্ট পড়া পর্যন্ত।
Cloud Storage-এ ফাইলের সম্পূর্ণ "পাথ" থাকে, তাই কোনও ফাইল ব্যবহারকারীর নিয়ন্ত্রণে
রাখার জন্য ফাইলের নামের প্রিফিক্সে ব্যবহারকারীকে শনাক্ত করার মতো অনন্য তথ্য (যেমন, ব্যবহারকারীর uid) থাকলেই চলে, যা নিয়ম মূল্যায়ন করার সময়
চেক করা যেতে পারে:
// Only a user can upload their profile picture, but anyone can view it match /users/{userId}/profilePicture.png { allow read; allow write: if request.auth.uid == userId; }
গ্রুপ ব্যক্তিগত
আরেকটি সমানভাবে সাধারণ ব্যবহারের ক্ষেত্রে কোনও অবজেক্টে গ্রুপ অনুমতি দেওয়া হবে, যেমন একাধিক টিম মেম্বারকে একটি শেয়ার করা ডকুমেন্টে একসাথে কাজ করার অনুমতি দেওয়া। এটি করার জন্য বিভিন্ন পদ্ধতি আছে:
- একটি Firebase Authentication কাস্টম টোকেন মিন্ট করুন যাতে গ্রুপের কোনও মেম্বার সম্পর্কে অতিরিক্ত তথ্য (যেমন, গ্রুপ আইডি) থাকে
- ফাইল মেটাডেটাতে গ্রুপ সংক্রান্ত তথ্য (যেমন, গ্রুপ আইডি বা অনুমোদিত
uid-এর তালিকা) অন্তর্ভুক্ত করুন
এই ডেটা টোকেন বা ফাইল মেটাডেটায় স্টোর করা হয়ে গেলে, কোনও নিয়ম থেকে এটিকে রেফারেন্স করা যেতে পারে:
// Allow reads if the group ID in your token matches the file metadata's `owner` property // Allow writes if the group ID is in the user's custom token match /files/{groupId}/{fileName} { allow read: if resource.metadata.owner == request.auth.token.groupId; allow write: if request.auth.token.groupId == groupId; }
মূল্যায়নের অনুরোধ করুন
আপলোড, ডাউনলোড, মেটাডেটা পরিবর্তন ও মুছে ফেলার মতো অ্যাকশন মূল্যায়ন করা হয়
Cloud Storage-এ পাঠানো request-এর মাধ্যমে। ব্যবহারকারীর অনন্য আইডি এবং
উপরে বর্ণিত request.auth অবজেক্টে Firebase Authentication পেলোড ছাড়াও,
request ভেরিয়েবলে ফাইলের পাথ থাকে যেখানে অনুরোধটি
সম্পাদন করা হচ্ছে, অনুরোধটি কখন গৃহীত হয়েছে এবং অনুরোধটি লেখার হলে
নতুন resource মান থাকে।
request অবজেক্টে ব্যবহারকারীর অনন্য আইডি এবং request.auth অবজেক্টে Firebase Authentication পেলোডও থাকে, যা ডকুমেন্টের ব্যবহারকারী-ভিত্তিক নিরাপত্তা বিভাগে আরও ব্যাখ্যা করা হবে।
request অবজেক্টের প্রপার্টির সম্পূর্ণ তালিকা নিচে দেওয়া হল:
| প্রপার্টি | প্রকার | বিবরণ |
|---|---|---|
auth |
<string, string> ম্যাপ করুন | কোনও ব্যবহারকারী লগ-ইন করলে, uid, ব্যবহারকারীর অনন্য আইডি এবং
token, Firebase Authentication JWT দাবির ম্যাপ প্রদান করে। অন্যথায়, এটি
null হবে। |
params |
<string, string> ম্যাপ করুন | অনুরোধের কোয়েরি প্যারামিটার সহ ম্যাপ। |
path |
পাথ | একটি path যা অনুরোধটি যে পথে করা হচ্ছে তা
প্রতিনিধিত্ব করে। |
resource |
<string, string> ম্যাপ করুন | নতুন রিসোর্স ভ্যালু, শুধুমাত্র write অনুরোধে উপস্থিত।
|
time |
টাইমস্ট্যাম্প | সার্ভারের সময় অনুযায়ী অনুরোধ মূল্যায়ন করার সময়কে টাইমস্ট্যাম্প হিসেবে দেখানো হয়। |
রিসোর্স মূল্যায়ন
নিয়ম মূল্যায়ন করার সময়, আপনি আপলোড, ডাউনলোড, পরিবর্তন বা মুছে ফেলা হচ্ছে এমন ফাইলের মেটাডেটাও মূল্যায়ন করতে চাইতে পারেন। এটি আপনাকে জটিল এবং শক্তিশালী নিয়ম তৈরি করতে দেয় যা নির্দিষ্ট কন্টেন্টের ধরন সহ ফাইল আপলোড করার অনুমতি দেয় বা নির্দিষ্ট সাইজের চেয়ে বড় ফাইল মুছে দেয়।
Cloud Storage-এর জন্য Firebase Security Rules, resource
অবজেক্টে ফাইল মেটাডেটা প্রদান করে, যার মধ্যে Cloud Storage অবজেক্টে দেখানো মেটাডেটার কী/ভ্যালু পেয়ার থাকে। ডেটা ইন্টিগ্রিটি নিশ্চিত করতে read বা
write অনুরোধে এইসব প্রপার্টি পরীক্ষা করা যেতে পারে।
writeটি অনুরোধে (যেমন আপলোড, মেটাডেটা আপডেট এবং মুছে ফেলা), resource অবজেক্ট ছাড়াও,
যেটিতে অনুরোধের পাথে বর্তমানে থাকা ফাইলের জন্য ফাইল মেটাডেটা রয়েছে, আপনার কাছে
request.resource অবজেক্ট ব্যবহার করার ক্ষমতাও রয়েছে, যাতে লেখার অনুমতি থাকলে লেখার জন্য ফাইল মেটাডেটার একটি সাবসেট থাকে। ডেটা ইন্টিগ্রিটি নিশ্চিত করতে বা ফাইলের ধরন বা সাইজের মতো অ্যাপ্লিকেশন সংক্রান্ত সীমাবদ্ধতা এনফোর্স করতে, আপনি এই দুটি ভ্যালু ব্যবহার করতে পারেন।
resource অবজেক্টের প্রপার্টির সম্পূর্ণ তালিকা নিচে দেওয়া হল:
| প্রপার্টি | প্রকার | বিবরণ |
|---|---|---|
name |
স্ট্রিং | অবজেক্টের সম্পূর্ণ নাম |
bucket |
স্ট্রিং | এই অবজেক্ট যে বাকেটে আছে তার নাম। |
generation |
int | এই অবজেক্টের Google Cloud Storage অবজেক্ট জেনারেশন। |
metageneration |
int | এই অবজেক্টের Google Cloud Storage অবজেক্ট মেটাজেনারেশন। |
size |
int | বাইটে অবজেক্টের সাইজ। |
timeCreated |
টাইমস্ট্যাম্প | অবজেক্ট তৈরি করার সময়কে বর্ণনা করে এমন টাইমস্ট্যাম্প। |
updated |
টাইমস্ট্যাম্প | একটি অবজেক্ট শেষবার কখন আপডেট করা হয়েছে সেই সময়কে টাইমস্ট্যাম্পের মাধ্যমে দেখানো হয়। |
md5Hash |
স্ট্রিং | অবজেক্টের MD5 হ্যাশ। |
crc32c |
স্ট্রিং | অবজেক্টের crc32c হ্যাশ। |
etag |
স্ট্রিং | এই অবজেক্টের সাথে যুক্ত etag। |
contentDisposition |
স্ট্রিং | এই অবজেক্টের সাথে যুক্ত কন্টেন্ট ডিসপোজিশন। |
contentEncoding |
স্ট্রিং | এই অবজেক্টের সাথে সম্পর্কিত কন্টেন্ট এনকোডিং। |
contentLanguage |
স্ট্রিং | এই অবজেক্টের সাথে যুক্ত কন্টেন্টের ভাষা। |
contentType |
স্ট্রিং | এই অবজেক্টের সাথে যুক্ত কন্টেন্টের ধরন। |
metadata |
<string, string> ম্যাপ করুন | অতিরিক্ত, ডেভেলপার-নির্দিষ্ট কাস্টম মেটাডেটার কী/ভ্যালু পেয়ার। |
request.resource-এ generation,
metageneration, etag, timeCreated ও updated ছাড়া এগুলির সবকটিই আছে।
Cloud Firestore-এর মাধ্যমে উন্নত করুন
অন্যান্য অনুমোদনের মানদণ্ড মূল্যায়ন করতে আপনি Cloud Firestore-এ ডকুমেন্ট অ্যাক্সেস করতে পারেন।
firestore.get() এবং firestore.exists() ফাংশন ব্যবহার করে, আপনার নিরাপত্তা
নিয়ম Cloud Firestore-এ থাকা ডকুমেন্টের সাথে ইনকামিং অনুরোধ মূল্যায়ন করতে পারে।
firestore.get() এবং firestore.exists() ফাংশন দুটির ক্ষেত্রেই সম্পূর্ণভাবে
নির্দিষ্ট করা ডকুমেন্ট পাথ প্রয়োজন। firestore.get() এবং firestore.exists()-এর জন্য পাথ তৈরি করতে ভেরিয়েবল ব্যবহার করার সময়,
আপনাকে $(variable) সিনট্যাক্স ব্যবহার করে
ভেরিয়েবল স্পষ্টভাবে এড়িয়ে যেতে হবে।
নিচের উদাহরণে, আমরা এমন একটি নিয়ম দেখতে পাচ্ছি যা নির্দিষ্ট ক্লাবের মেম্বারদের ফাইল পড়ার অ্যাক্সেস সীমিত করে।
service firebase.storage {
match /b/{bucket}/o {
match /users/{club}/files/{fileId} {
allow read: if club in
firestore.get(/databases/(default)/documents/users/$(request.auth.id)).data.memberships
}
}
}service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/photos/{fileId} {
allow read: if
firestore.exists(/databases/(default)/documents/users/$(userId)/friends/$(request.auth.id))
}
}
}আপনি প্রথমবার Cloud Storage Security Rules তৈরি ও সেভ করার পরে, যা এই Cloud Firestore ফাংশন ব্যবহার করে, আপনাকে Firebase কনসোল বা Firebase CLI-তে প্রম্পট করা হবে দুটি প্রোডাক্ট কানেক্ট করার জন্য অনুমতি চালু করতে।
Firebase Security Rules ম্যানেজ ও ডিপ্লয় করুন-এ যেমন বর্ণনা করা হয়েছে, সেই অনুযায়ী IAM ভূমিকা সরিয়ে দিয়ে আপনি ফিচারটি বন্ধ করতে পারবেন।
ডেটা যাচাই করা হচ্ছে
Cloud Storage-এর জন্য Firebase Security Rules ডেটা যাচাইকরণের জন্যও ব্যবহার করা যেতে পারে, যার মধ্যে রয়েছে
ফাইলের নাম এবং পাথ যাচাই করার পাশাপাশি ফাইলের মেটাডেটা প্রপার্টি যেমন
contentType এবং size।
service firebase.storage { match /b/{bucket}/o { match /images/{imageId} { // Only allow uploads of any image file that's less than 5MB allow write: if request.resource.size < 5 * 1024 * 1024 && request.resource.contentType.matches('image/.*'); } } }
কাস্টম ফাংশন
আপনার Firebase Security Rules আরও জটিল হয়ে উঠলে, আপনি হয়ত শর্তের সেটকে ফাংশনে র্যাপ করতে চাইবেন, যাতে আপনি নিজের রুলসেট জুড়ে সেগুলি আবার ব্যবহার করতে পারেন। নিরাপত্তা সংক্রান্ত নিয়মে কাস্টম ফাংশন কাজ করে। কাস্টম ফাংশনের সিনট্যাক্স কিছুটা JavaScript-এর মতো, তবে Firebase Security Rules ফাংশন ডোমেন-নির্দিষ্ট ভাষায় লেখা হয় যার কিছু গুরুত্বপূর্ণ সীমাবদ্ধতা আছে:
- ফাংশনে শুধুমাত্র একটি
returnস্টেটমেন্ট থাকতে পারে। এতে কোনও অতিরিক্ত লজিক থাকতে পারবে না। যেমন, তারা লুপ এক্সিকিউট করতে বা এক্সটার্নাল পরিষেবা কল করতে পারে না। - ফাংশন অটোমেটিক স্কোপ থেকে ফাংশন ও ভেরিয়েবেল অ্যাক্সেস করতে পারে
যেখানে সেগুলি সংজ্ঞায়িত করা আছে। যেমন,
service firebase.storageস্কোপের মধ্যে নির্দিষ্ট করা ফাংশনেরresourceভেরিয়েবেলে অ্যাক্সেস আছে এবং শুধুমাত্র Cloud Firestore-এর জন্য,get()ওexists()-এর মতো বিল্ট-ইন ফাংশন। - ফাংশন অন্যান্য ফাংশন কল করতে পারে কিন্তু রিকার্স নাও করতে পারে। মোট কল স্ট্যাকের গভীরতা ১০-এর মধ্যে সীমিত।
rules2ভার্সনে, ফাংশনletকীওয়ার্ড ব্যবহার করে ভেরিয়েবল নির্ধারণ করতে পারে। ফাংশনে যেকোনও সংখ্যক লেট বাইন্ডিং থাকতে পারে, তবে অবশ্যই রিটার্ন স্টেটমেন্ট দিয়ে শেষ হতে হবে।
function কীওয়ার্ডের মাধ্যমে একটি ফাংশন সংজ্ঞায়িত করা হয় এবং এটি শূন্য বা তার বেশি
আর্গুমেন্ট নেয়। যেমন, আপনি হয়ত উপরে দেওয়া উদাহরণে ব্যবহৃত দুই ধরনের শর্তকে
একটি ফাংশনে একত্রিত করতে চাইবেন:
service firebase.storage {
match /b/{bucket}/o {
// True if the user is signed in or the requested data is 'public'
function signedInOrPublic() {
return request.auth.uid != null || resource.data.visibility == 'public';
}
match /images/{imageId} {
allow read, write: if signedInOrPublic();
}
match /mp3s/{mp3Ids} {
allow read: if signedInOrPublic();
}
}
}
আপনার Firebase Security Rules-এ ফাংশন ব্যবহার করলে, আপনার নিয়মের জটিলতা বাড়ার সাথে সাথে সেগুলি আরও বেশি রক্ষণাবেক্ষণযোগ্য হয়ে ওঠে।
পরবর্তী ধাপ
শর্তাবলী নিয়ে এই আলোচনার পরে, আপনি নিয়ম সম্পর্কে আরও ভালোভাবে বুঝতে পেরেছেন এবং এগুলি করতে প্রস্তুত:
কীভাবে মূল ব্যবহারের কেসগুলি পরিচালনা করতে হয় এবং নিয়মগুলি তৈরি, পরীক্ষা এবং স্থাপন করার জন্য ওয়ার্কফ্লো শিখুন:
- সাধারণ পরিস্থিতি সমাধান করে এমন নিয়ম লিখুন।
- এমন পরিস্থিতি পর্যালোচনা করে আপনার জ্ঞান বৃদ্ধি করুন যেখানে আপনাকে অবশ্যই অসুরক্ষিত নিয়ম চিহ্নিত করতে এবং এড়াতে হবে।
- Cloud Storage এমুলেটর এবং ডেডিকেটেড নিরাপত্তা সংক্রান্ত নিয়ম পরীক্ষার লাইব্রেরি ব্যবহার করে নিয়ম পরীক্ষা করুন।
- Security Rules ডিপ্লয় করার জন্য উপলভ্য পদ্ধতিগুলি পর্যালোচনা করুন।