Cloud Storage ল্যাঙ্গুয়েজের জন্য Firebase নিরাপত্তা নিয়মের মূল সিনট্যাক্স সম্পর্কে জানুন

Cloud Storage-এর জন্য Firebase Security Rules আপনাকে Cloud Storage বাকেটে স্টোর করা অবজেক্টের অ্যাক্সেস নিয়ন্ত্রণ করতে দেয়। ফ্লেক্সিবল রুল সিনট্যাক্স আপনাকে যেকোনও অপারেশন কন্ট্রোল করার জন্য নিয়ম তৈরি করতে দেয়, আপনার Cloud Storage বাকেটে সব রাইট থেকে শুরু করে নির্দিষ্ট ফাইলে অপারেশন পর্যন্ত।

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 Security Rules-এর প্রাথমিক সিনট্যাক্স এবং স্ট্রাকচার বর্ণনা করে।

পরিষেবা ও ডেটাবেস ঘোষণা

Cloud Storage-এর জন্য Firebase Security Rules সবসময় নিম্নলিখিত ঘোষণা দিয়ে শুরু হয়:

service firebase.storage {
    // ...
}

service firebase.storage ডিক্লারেশন Cloud Storage-এর জন্য নিয়মগুলি স্কোপ করে, Cloud Storage Security Rules এবং অন্যান্য প্রোডাক্টের নিয়মের মধ্যে দ্বন্দ্ব প্রতিরোধ করে, যেমন Cloud Firestore।

প্রাথমিক পড়া/লেখার নিয়ম

প্রাথমিক নিয়মে match স্টেটমেন্ট থাকে যা Cloud Storage বাকেট শনাক্ত করে, ফাইলের নাম নির্দিষ্ট করে ম্যাচ স্টেটমেন্ট এবং allow এক্সপ্রেশন যা নির্দিষ্ট ডেটা কখন পড়া যাবে তা বিস্তারিতভাবে জানায়। allow এক্সপ্রেশন সংশ্লিষ্ট অ্যাক্সেস পদ্ধতি (যেমন, পড়া, লেখা) এবং শর্তাবলী নির্দিষ্ট করে, যার অধীনে অ্যাক্সেস অনুমোদিত বা অস্বীকৃত হয়।

আপনার ডিফল্ট রুলসেটে, প্রথম match স্টেটমেন্ট {bucket} ওয়াইল্ডকার্ড এক্সপ্রেশন ব্যবহার করে এটি বোঝাতে যে আপনার প্রোজেক্টের সব বাকেটের ক্ষেত্রে নিয়ম প্রযোজ্য। আমরা পরবর্তী বিভাগে ওয়াইল্ডকার্ড ম্যাচ সম্পর্কে আরও আলোচনা করব।

service firebase.storage {
  // The {bucket} wildcard indicates we match files in all Cloud Storage buckets
  match /b/{bucket}/o {
    // Match filename
    match /filename {
      allow read: if <condition>;
      allow write: if <condition>;
    }
  }
}

সব ম্যাচ স্টেটমেন্ট ফাইলকে নির্দেশ করে। ম্যাচ স্টেটমেন্ট কোনও নির্দিষ্ট ফাইলকে নির্দেশ করতে পারে, যেমন match /images/profilePhoto.png।

ওয়াইল্ডকার্ড ম্যাচ করুন

একটি ফাইলকে নির্দেশ করার পাশাপাশি, Security Rules ওয়াইল্ডকার্ড ব্যবহার করতে পারে যাতে নামের মধ্যে প্রদত্ত স্ট্রিং প্রিফিক্স সহ যেকোনও ফাইলকে নির্দেশ করা যায়, যার মধ্যে স্ল্যাশও অন্তর্ভুক্ত, যেমন match /images/{imageId}-এ আছে।

উপরের উদাহরণে, ম্যাচ স্টেটমেন্ট {imageId} ওয়াইল্ডকার্ড সিনট্যাক্স ব্যবহার করে। এর অর্থ হল, এই নিয়মটি এমন যেকোনও ফাইলের ক্ষেত্রে প্রযোজ্য যার নামের শুরুতে /images/ আছে, যেমন /images/profilePhoto.png বা /images/croppedProfilePhoto.png। ম্যাচ স্টেটমেন্টে allow এক্সপ্রেশন মূল্যায়ন করা হলে, imageId ভেরিয়েবল ইমেজ ফাইলের নাম হিসেবে সমাধান করা হবে, যেমন profilePhoto.png বা croppedProfilePhoto.png।

ফাইলের নাম বা পাথ অনুমোদনের জন্য match-এর মধ্যে থেকে ওয়াইল্ডকার্ড ভেরিয়েবল রেফারেন্স করা যেতে পারে:

// Another way to restrict the name of a file
match /images/{imageId} {
  allow read: if imageId == "profilePhoto.png";
}

হায়ারার্কিক্যাল ডেটা

আমরা আগেই বলেছি, Cloud Storage বাকেটের মধ্যে কোনও হায়ারার্কিক্যাল স্ট্রাকচার নেই। কিন্তু ফাইলের নাম দেওয়ার কনভেনশন ব্যবহার করে, প্রায়শই ফাইলের নামে স্ল্যাশ ব্যবহার করে, আমরা এমন একটি স্ট্রাকচার তৈরি করতে পারি যা দেখতে নেস্টেড ডিরেক্টরি ও সাব-ডিরেক্টরির সিরিজের মতো হয়। Firebase Security Rules কীভাবে এইসব ফাইলের নামের সাথে ইন্টার‌্যাক্ট করে তা বোঝা গুরুত্বপূর্ণ।

এমন একটি ফাইল সেটের কথা ভাবুন যেগুলির নাম /images/ স্টেম দিয়ে শুরু হয়। Firebase Security Rules শুধুমাত্র মিলে যাওয়া ফাইলের নামের ক্ষেত্রে প্রযোজ্য, তাই /images/ স্টেমের উপর সংজ্ঞায়িত অ্যাক্সেস কন্ট্রোল /mp3s/ স্টেমের উপর প্রযোজ্য হয় না। পরিবর্তে, বিভিন্ন ফাইলের নামের প্যাটার্নের সাথে মেলে এমন স্পষ্ট নিয়ম লিখুন:

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      allow read, write: if <condition>;
    }

    // Explicitly define rules for the 'mp3s' pattern
    match /mp3s/{mp3Id} {
      allow read, write: if <condition>;
    }
  }
}

match স্টেটমেন্ট নেস্ট করার সময়, ভিতরের match স্টেটমেন্টের পাথ সবসময় বাইরের match স্টেটমেন্টের পাথের সাথে যোগ করা হয়। তাই, নিম্নলিখিত দুটি রুলসেট একই:

service firebase.storage {
  match /b/{bucket}/o {
    match /images {
      // Exact match for "images/profilePhoto.png"
      match /profilePhoto.png {
        allow write: if <condition>;
      }
    }
  }
}
service firebase.storage {
  match /b/{bucket}/o {
    // Exact match for "images/profilePhoto.png"
    match /images/profilePhoto.png {
      allow write: if <condition>;
      }
  }
}

রিকার্সিভ ম্যাচ ওয়াইল্ডকার্ড

ফাইলের নামের শেষে স্ট্রিং ম্যাচ ও রিটার্ন করে এমন ওয়াইল্ডকার্ড ছাড়াও, আরও জটিল ম্যাচিংয়ের জন্য একাধিক সেগমেন্ট ওয়াইল্ডকার্ড ঘোষণা করা যেতে পারে। ওয়াইল্ডকার্ডের নামের সাথে =** যোগ করে এটি করা যায়, যেমন {path=**}:

// Partial match for files that start with "images"
match /images {

  // Exact match for "images/**"
  // e.g. images/users/user:12345/profilePhoto.png is matched
  // images/profilePhoto.png is also matched!
  match /{allImages=**} {
    // This rule matches one or more path segments (**)
    // allImages is a path that contains all segments matched
    allow read: if <other_condition>;
  }
}

কোনও ফাইলের সাথে একাধিক নিয়ম ম্যাচ করলে, সব নিয়ম মূল্যায়নের ফলাফলের OR ফলাফল হিসেবে দেখানো হয়। অর্থাৎ, ফাইলটি ম্যাচ করে এমন কোনও নিয়ম true-এ মূল্যায়ন করলে, ফলাফল true হয়।

উপরের নিয়মে, "images/profilePhoto.png" ফাইলটি পড়া যাবে যদি condition অথবা other_condition-এর মধ্যে যেকোনও একটির মূল্যায়ন সত্য হয়, যেখানে "images/users/user:12345/profilePhoto.png" ফাইলটি শুধুমাত্র other_condition-এর ফলাফলের উপর নির্ভর করে।

Cloud Storage Security Rules ক্যাসকেড করে না এবং নিয়মগুলি শুধুমাত্র তখনই মূল্যায়ন করা হয় যখন অনুরোধের পাথ নির্দিষ্ট নিয়ম সহ একটি পাথের সাথে মেলে।

ভার্সন 1

Firebase Security Rules ডিফল্ট হিসেবে ভার্সন ১ ব্যবহার করে। ভার্সন ১-এ, রিকার্সিভ ওয়াইল্ডকার্ড এক বা একাধিক ফাইলের নামের এলিমেন্টের সাথে ম্যাচ করে, শূন্য বা তার বেশি এলিমেন্টের সাথে নয়। সুতরাং, match /images/{filenamePrefixWildcard}/{imageFilename=**} /images/profilePics/profile.png-এর মতো ফাইলের নামের সাথে ম্যাচ করে, কিন্তু /images/badge.png-এর সাথে নয়। পরিবর্তে /images/{imagePrefixorFilename=**} ব্যবহার করুন।

ম্যাচ স্টেটমেন্টের শেষে রিকার্সিভ ওয়াইল্ডকার্ড থাকতে হবে।

আরও শক্তিশালী ফিচারের জন্য আমরা আপনাকে ভার্সন ২ ব্যবহার করার সাজেশন দিই।

ভার্সন ২

Firebase Security Rules-এর ২ নম্বর ভার্সনে, রিকার্সিভ ওয়াইল্ডকার্ড শূন্য বা তার বেশি পাথ আইটেমের সাথে ম্যাচ করে। তাই, /images/{filenamePrefixWildcard}/{imageFilename=**} /images/profilePics/profile.png এবং /images/badge.png ফাইলের নামের সাথে মিলে যায়।

আপনার নিরাপত্তা নিয়মের একদম উপরে rules_version = '2'; যোগ করে আপনাকে ভার্সন ২-এ অপ্ট-ইন করতে হবে:

rules_version = '2';
service cloud.storage {
  match /b/{bucket}/o {
   ...
 }
}

প্রতিটি ম্যাচ স্টেটমেন্টে সর্বাধিক একটি রিকার্সিভ ওয়াইল্ডকার্ড থাকতে পারে, তবে ভার্সন ২-এ, আপনি ম্যাচ স্টেটমেন্টের যেকোনও জায়গায় এই ওয়াইল্ডকার্ড রাখতে পারেন। যেমন:

rules_version = '2';
service firebase.storage {
 match /b/{bucket}/o {
   // Matches any file in a songs "subdirectory" under the
   // top level of your Cloud Storage bucket.
   match /{prefixSegment=**}/songs/{mp3filenames} {
     allow read, write: if <condition>;
   }
  }
}

গ্র্যানুলার অপারেশন

কিছু পরিস্থিতিতে, read এবং write-কে আরও গ্র্যানুলার অপারেশনে ভাগ করা উপযোগী। যেমন, আপনার অ্যাপ ফাইল মুছে ফেলার চেয়ে ফাইল তৈরি করার ক্ষেত্রে বিভিন্ন শর্ত প্রয়োগ করতে চাইতে পারে।

read অপারেশনকে get ও list-এ ভাগ করা যেতে পারে।

write নিয়মকে create, update ও delete-এ ভাগ করা যেতে পারে:

service firebase.storage {
  match /b/{bucket}/o {
    // A read rule can be divided into read and list rules
    match /images/{imageId} {
      // Applies to single file read requests
      allow get: if <condition>;
      // Applies to list and listAll requests (Security Rules Version 2)
      allow list: if <condition>;

    // A write rule can be divided into create, update, and delete rules
    match /images/{imageId} {
      // Applies to writes to file contents
      allow create: if <condition>;

      // Applies to updates to (pre-existing) file metadata
      allow update: if <condition>;

      // Applies to delete operations
      allow delete: if <condition>;
    }
  }
 }
}

ওভারল্যাপ করা ম্যাচ স্টেটমেন্ট

ফাইলের নাম একাধিক match স্টেটমেন্টের সাথে মিলে যেতে পারে। কোনও অনুরোধের সাথে একাধিক allow এক্সপ্রেশন মিলে গেলে, শর্তগুলির মধ্যে যেকোনও একটি true হলে, অ্যাক্সেসের অনুমতি দেওয়া হয়:

service firebase.storage {
  match b/{bucket}/o {
    // Matches file names directly inside of '/images/'.
    match /images/{imageId} {
      allow read, write: if false;
    }

    // Matches file names anywhere under `/images/`
    match /images/{imageId=**} {
      allow read, write: if true;
    }
  }
}

উপরের উদাহরণে, /images/ দিয়ে শুরু হওয়া নামের সব ফাইল পড়া ও লেখার অনুমতি দেওয়া হয়েছে, কারণ প্রথম নিয়ম false হলেও, দ্বিতীয় নিয়ম সবসময় true।

নিয়ম ফিল্টার নয়

আপনার ডেটা সুরক্ষিত করার পরে এবং ফাইল অপারেশন শুরু করার পরে, মনে রাখবেন যে নিরাপত্তা সংক্রান্ত নিয়মগুলি ফিল্টার নয়। আপনি ফাইলের নামের প্যাটার্নের সাথে ম্যাচ করে এমন ফাইলের সেটে অপারেশন করতে পারবেন না এবং আশা করতে পারেন যে Cloud Storage শুধুমাত্র সেইসব ফাইল অ্যাক্সেস করবে যেগুলি অ্যাক্সেস করার অনুমতি বর্তমান ক্লায়েন্টের আছে।

যেমন, নিম্নলিখিত নিরাপত্তা সংক্রান্ত নিয়মটি দেখুন:

service firebase.storage {
  match /b/{bucket}/o {
    // Allow the client to read files with contentType 'image/png'
    match /aFileNamePrefix/{aFileName} {
      allow read: if resource.contentType == 'image/png';
    }
  }
}

প্রত্যাখ্যান করা হয়েছে: এই নিয়ম নিম্নলিখিত অনুরোধ প্রত্যাখ্যান করে কারণ ফলাফল সেটে এমন ফাইল থাকতে পারে যেখানে contentType image/png নয়:

ওয়েব
filesRef = storage.ref().child("aFilenamePrefix");

filesRef.listAll()
    .then(function(result) {
      console.log("Success: ", result.items);
    })
});

Cloud Storage Security Rules-এর নিয়ম প্রতিটি কোয়েরি তার সম্ভাব্য ফলাফলের সাথে মূল্যায়ন করে এবং ক্লায়েন্টের কাছে পড়ার অনুমতি নেই এমন ফাইল ফেরত দিলে অনুরোধটি বাতিল করে দেয়। অ্যাক্সেসের অনুরোধ অবশ্যই আপনার নিয়মের দ্বারা সেট করা সীমাবদ্ধতা অনুসরণ করতে হবে।

পরবর্তী ধাপ

আপনি Cloud Storage-এর জন্য Firebase Security Rules-এর ব্যাপারে আরও গভীরভাবে বুঝতে পারবেন:

  • Rules ল্যাঙ্গুয়েজের পরবর্তী প্রধান ধারণা, ডায়নামিক শর্তাবলী সম্পর্কে জানুন, যা আপনার Rules-কে ব্যবহারকারীর অনুমোদন চেক করতে, আগে থেকে থাকা এবং ইনকামিং ডেটা তুলনা করতে, ইনকামিং ডেটা যাচাই করতে এবং আরও অনেক কিছু করতে দেয়।

  • নিরাপত্তা সংক্রান্ত সাধারণ ব্যবহারের উদাহরণ এবং Firebase Security Rules সেগুলির সমাধান করে এমন সংজ্ঞা পর্যালোচনা করুন।

আপনি Cloud Storage-এর জন্য নির্দিষ্ট Firebase Security Rules ব্যবহারিক ক্ষেত্র এক্সপ্লোর করতে পারবেন: