Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

সুরক্ষা বিধি কীভাবে কাজ করে

অ্যাপ্লিকেশন ডেভেলপমেন্ট ধাঁধার সবচেয়ে জটিল অংশগুলির মধ্যে একটি হতে পারে নিরাপত্তা। বেশিরভাগ অ্যাপ্লিকেশনে, ডেভেলপারদের অবশ্যই একটি সার্ভার তৈরি এবং চালাতে হবে যা প্রমাণীকরণ (একজন ব্যবহারকারী কে) এবং অনুমোদন (একজন ব্যবহারকারী কি করতে পারে) পরিচালনা করে।

ফায়ারবেস সিকিউরিটি রুলস মধ্যম (সার্ভার) স্তরটি সরিয়ে দেয় এবং আপনাকে সরাসরি আপনার ডেটার সাথে সংযুক্ত ক্লায়েন্টদের জন্য পাথ-ভিত্তিক অনুমতি নির্দিষ্ট করার অনুমতি দেয়। ইনকামিং রিকোয়েস্টগুলিতে কিভাবে নিয়ম প্রয়োগ করা হয় সে সম্পর্কে আরও জানতে এই গাইডটি ব্যবহার করুন।

একটি পণ্য নির্বাচন করুন তার নিয়ম সম্পর্কে আরো জানতে।

ক্লাউড ফায়ারস্টোর

মৌলিক গঠন

ক্লাউড ফায়ারস্টোর এবং ক্লাউড স্টোরেজে ফায়ারবেস সিকিউরিটি রুলস নিম্নলিখিত কাঠামো এবং সিনট্যাক্স ব্যবহার করে:

service <<name>> {
  // Match the resource path.
  match <<path>> {
    // Allow the request if the following conditions are true.
    allow <<methods>> : if <<condition>>
  }
}

আপনি নিয়মগুলি তৈরি করার সময় নিম্নলিখিত মূল ধারণাগুলি বোঝা গুরুত্বপূর্ণ:

  • অনুরোধ: পদ্ধতি বা পদ্ধতিতে প্রার্থনা allow বিবৃতি। এই পদ্ধতিগুলি আপনি চালানোর অনুমতি দিচ্ছেন। মান পদ্ধতিগুলি হল: get , list , create , update , এবং deleteread এবং write সুবিধার পদ্ধতি নিদিষ্ট ডাটাবেসের বা স্টোরেজ পথে বিস্তৃত পড়া এবং লেখার অ্যাক্সেস সক্ষম করুন।
  • পথ: ডাটাবেসের বা স্টোরেজ অবস্থান, কোনো URI পথ হিসাবে প্রতিনিধিত্ব।
  • বিধি: allow বিবৃতি, যা একটি শর্তে যে একটি অনুরোধ অনুমতি দেয় যদি এটি সত্য মূল্যায়ণ অন্তর্ভুক্ত করা হয়েছে।

নিরাপত্তা নিয়ম সংস্করণ 2

মে 2019 পর্যন্ত, ফায়ারবেস নিরাপত্তা বিধির সংস্করণ 2 এখন উপলব্ধ। নিয়ম সংস্করণ 2 আচরণ পরিবর্তন রিকার্সিভ ওয়াইল্ডকার্ড {name=**} । যদি আপনি ব্যবহার করতে পরিকল্পনা আপনি সংস্করণ 2 ব্যবহার করা আবশ্যক সংগ্রহে গ্রুপ প্রশ্নের । আপনি অপ্ট-ইন সংস্করণ 2 আবশ্যক করে rules_version = '2'; আপনার নিরাপত্তা নিয়মের প্রথম লাইন:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

মিলে যাওয়া পথ

সমস্ত ম্যাচ বিবৃতি সংগ্রহ নয়, নথির দিকে নির্দেশ করা উচিত। একটি খেলা বিবৃতি একটি নির্দিষ্ট নথিতে, হিসাবে নির্দেশ করতে পারেন match /cities/SF বা ব্যবহারের ওয়াইল্ডকার্ড বিন্দু কোনো নথিতে নির্দিষ্ট পাথ হিসেবে match /cities/{city}

উপরের উদাহরণে, ম্যাচ বিবৃতি ব্যবহার {city} ওয়াইল্ডকার্ড সিনট্যাক্স। এই উপায়ে নিয়ম যে কোন ডকুমেন্ট প্রযোজ্য cities সংগ্রহ, যেমন /cities/SF বা /cities/NYC । যখন allow ম্যাচ বিবৃতিতে এক্সপ্রেশন মূল্যায়ন করা হয়, city পরিবর্তনশীল যেমন শহর দস্তাবেজের নাম, এর সমাধান হবে SF বা NYC

মিলে যাওয়া উপ -সংগ্রহ

ক্লাউড ফায়ারস্টোরে ডেটা দলিল সংগ্রহে সংগঠিত, এবং প্রতিটি নথি উপ -সংগ্রহগুলির মাধ্যমে শ্রেণিবিন্যাস প্রসারিত করতে পারে। এটা বোঝা গুরুত্বপূর্ণ যে সুরক্ষা বিধিগুলি শ্রেণিবিন্যাসের সাথে কীভাবে যোগাযোগ করে।

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      allow read, write: if <condition>;

      // Explicitly define rules for the 'landmarks' subcollection
      match /landmarks/{landmark} {
        allow read, write: if <condition>;
      }
    }
  }
}

যখন পাখির match বিবৃতি, ভিতরের পথ match বিবৃতি সবসময় বাইরের পথ আপেক্ষিক match বিবৃতি। নিম্নলিখিত নিয়ম সেটগুলি সমতুল্য:

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      match /landmarks/{landmark} {
        allow read, write: if <condition>;
      }
    }
  }
}
service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city}/landmarks/{landmark} {
      allow read, write: if <condition>;
    }
  }
}

পুনরাবৃত্তিমূলক ওয়াইল্ডকার্ড

আপনি নিয়মটি একটি ইচ্ছামত গভীর অনুক্রমের প্রয়োগ করতে চান, তাহলে রিকার্সিভ ওয়াইল্ডকার্ড সিনট্যাক্স ব্যবহার {name=**} :

service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the cities collection as well as any document
    // in a subcollection.
    match /cities/{document=**} {
      allow read, write: if <condition>;
    }
  }
}

পুনরাবৃত্তিমূলক ওয়াইল্ডকার্ড সিনট্যাক্স ব্যবহার করার সময়, ওয়াইল্ডকার্ড ভেরিয়েবলটি পুরো মিলের পাথ সেগমেন্ট ধারণ করবে, এমনকি যদি ডকুমেন্টটি গভীরভাবে নেস্টেড সাবকলেকশনে থাকে। উদাহরণস্বরূপ, উপরে তালিকাভুক্ত নিয়ম এ অবস্থিত একটি নথি মেলে দিবে /cities/SF/landmarks/coit_tower , এবং মান document পরিবর্তনশীল হবে SF/landmarks/coit_tower

উল্লেখ্য, পুনরাবৃত্তিমূলক ওয়াইল্ডকার্ডের আচরণ নিয়ম সংস্করণের উপর নির্ভর করে।

সংস্করণ 1

নিরাপত্তা নিয়ম ডিফল্টরূপে সংস্করণ 1 ব্যবহার করে। সংস্করণ 1 এ, পুনরাবৃত্তিমূলক ওয়াইল্ডকার্ডগুলি এক বা একাধিক পথ আইটেমের সাথে মেলে। তাই তারা একটি খালি পথ মিলছে না, match /cities/{city}/{document=**} মধ্যে অনুসংগ্রহ নথি সাথে মিলে যায় কিন্তু cities সংগ্রহ, যেহেতু match /cities/{document=**} উভয় কাগজপত্র সাথে মিলে যায় cities সংগ্রহ ও অনুসংগ্রহ।

পুনরাবৃত্তিমূলক ওয়াইল্ডকার্ড অবশ্যই একটি ম্যাচের বিবৃতির শেষে আসতে হবে।

সংস্করণ 2

নিরাপত্তা বিধির সংস্করণ 2 -তে, পুনরাবৃত্তিমূলক ওয়াইল্ডকার্ড শূন্য বা তার বেশি পথের আইটেমের সাথে মেলে। match/cities/{city}/{document=**} যে কোন অনুসংগ্রহ সেইসাথে নথি নথি ম্যাচ cities সংগ্রহ।

আপনি অপ্ট-ইন সংস্করণ 2 আবশ্যক যোগ করে rules_version = '2'; আপনার নিরাপত্তা নিয়মের শীর্ষে:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the cities collection as well as any document
    // in a subcollection.
    match /cities/{city}/{document=**} {
      allow read, write: if <condition>;
    }
  }
}

আপনি প্রতি ম্যাচ বিবৃতিতে সর্বাধিক একটি পুনরাবৃত্তিমূলক ওয়াইল্ডকার্ড পেতে পারেন, কিন্তু 2 সংস্করণে, আপনি ম্যাচ বিবৃতিতে যে কোনও জায়গায় এই ওয়াইল্ডকার্ড রাখতে পারেন। উদাহরণ স্বরূপ:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the songs collection group
    match /{path=**}/songs/{song} {
      allow read, write: if <condition>;
    }
  }
}

আপনি ব্যবহার করেন তাহলে সংগ্রহে গ্রুপ প্রশ্নের , আপনি, সংস্করণ 2 ব্যবহার করা আবশ্যক দেখতে সংগ্রহে গ্রুপ প্রশ্নের সুরক্ষিত

ওভারল্যাপিং ম্যাচ বিবৃতি

এটা একটা দলিল একটির বেশি মেলানোর জন্য সম্ভব match বিবৃতি। কেস যেখানে একাধিক ইন allow এক্সপ্রেশন একটি অনুরোধ মেলে, অ্যাক্সেস করা মঞ্জুরিপ্রাপ্ত যদি অবস্থার কোন হয় true :

service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the 'cities' collection.
    match /cities/{city} {
      allow read, write: if false;
    }

    // Matches any document in the 'cities' collection or subcollections.
    match /cities/{document=**} {
      allow read, write: if true;
    }
  }
}

উপরের উদাহরণে, সব পড়ে এবং উদ্দেশে চিঠি লেখেন cities সংগ্রহে দ্বিতীয় নিয়ম সবসময় কারণ অনুমতি দেওয়া হবে true , যদিও প্রথম নিয়ম সর্বদা false

নিরাপত্তা নিয়ম সীমা

আপনি যখন নিরাপত্তা বিধি নিয়ে কাজ করেন, নিম্নলিখিত সীমাগুলি লক্ষ্য করুন:

সীমা বিস্তারিত
সর্বাধিক সংখ্যা exists() , get() , এবং getAfter() প্রতি অনুরোধ আহ্বান
  • একক নথি অনুরোধ এবং জিজ্ঞাসা অনুরোধের জন্য 10।
  • মাল্টি-ডকুমেন্ট পড়া, লেনদেন, এবং ব্যাচড লেখার জন্য 20। 10 এর আগের সীমাটিও প্রতিটি অপারেশনের ক্ষেত্রে প্রযোজ্য।

    উদাহরণস্বরূপ, কল্পনা করুন যে আপনি 3 টি লেখার ক্রিয়াকলাপের সাথে একটি ব্যাচযুক্ত লেখার অনুরোধ তৈরি করেছেন এবং আপনার সুরক্ষা বিধিগুলি প্রতিটি লেখা যাচাই করার জন্য 2 টি নথি অ্যাক্সেস কল ব্যবহার করে। এই ক্ষেত্রে, প্রতিটি লেখা তার 10 টি অ্যাক্সেস কলগুলির মধ্যে 2 টি ব্যবহার করে এবং ব্যাচ করা লেখার অনুরোধটি 20 টি অ্যাক্সেস কলগুলির মধ্যে 6 টি ব্যবহার করে।

সীমা অতিক্রম করা একটি অনুমতি অস্বীকার ত্রুটি ফলাফল।

কিছু ডকুমেন্ট অ্যাক্সেস কল ক্যাশে করা হতে পারে, এবং ক্যাশেড কল সীমার মধ্যে গণনা করা হয় না।

সর্বোচ্চ নেস্টেড match বিবৃতি গভীরতা 10
সর্বোচ্চ পথ দৈর্ঘ্য, পাথ অংশ এ, নেস্টেড একটি সেট মধ্যে ব্যবহার করা যাবে match বিবৃতি 100
পথ ক্যাপচার ভেরিয়েবল সর্বাধিক সংখ্যা নেস্টেড একটি সেট মধ্যে ব্যবহার করা যাবে match বিবৃতি 20
সর্বোচ্চ ফাংশন কল গভীরতা 20
ফাংশন আর্গুমেন্টের সর্বাধিক সংখ্যা 7
সর্বাধিক সংখ্যা let ফাংশন প্রতি পরিবর্তনশীল বাইন্ডিং 10
পুনরাবৃত্তিমূলক বা চক্রীয় ফাংশন কলগুলির সর্বাধিক সংখ্যা 0 (অনুমোদিত নয়)
অনুরোধ প্রতি মূল্যায়িত এক্সপ্রেশনের সর্বোচ্চ সংখ্যা 1,000
একটি নিয়মের সর্বাধিক আকার Rulesets দুটি আকার সীমা মেনে চলতে হবে:
  • Firebase কনসোল থেকে বা CLI ব্যবহার থেকে প্রকাশিত ruleset টেক্সট উৎস আকারের উপর একটি 256 কিলোবাইট সীমা firebase deploy
  • কম্পাইল করা রুলসেট আকারের একটি 250 KB সীমা যা ফায়ারবেস উৎসকে প্রক্রিয়া করে এবং ব্যাক-এন্ডে এটি সক্রিয় করে।

মেঘ স্টোরেজ

মৌলিক গঠন

ক্লাউড ফায়ারস্টোর এবং ক্লাউড স্টোরেজে ফায়ারবেস সিকিউরিটি রুলস নিম্নলিখিত কাঠামো এবং সিনট্যাক্স ব্যবহার করে:

service <<name>> {
  // Match the resource path.
  match <<path>> {
    // Allow the request if the following conditions are true.
    allow <<methods>> : if <<condition>>
  }
}

আপনি নিয়মগুলি তৈরি করার সময় নিম্নলিখিত মূল ধারণাগুলি বোঝা গুরুত্বপূর্ণ:

  • অনুরোধ: পদ্ধতি বা পদ্ধতিতে প্রার্থনা allow বিবৃতি। এই পদ্ধতিগুলি আপনি চালানোর অনুমতি দিচ্ছেন। মান পদ্ধতিগুলি হল: get , list , create , update , এবং deleteread এবং write সুবিধার পদ্ধতি নিদিষ্ট ডাটাবেসের বা স্টোরেজ পথে বিস্তৃত পড়া এবং লেখার অ্যাক্সেস সক্ষম করুন।
  • পথ: ডাটাবেসের বা স্টোরেজ অবস্থান, কোনো URI পথ হিসাবে প্রতিনিধিত্ব।
  • বিধি: allow বিবৃতি, যা একটি শর্তে যে একটি অনুরোধ অনুমতি দেয় যদি এটি সত্য মূল্যায়ণ অন্তর্ভুক্ত করা হয়েছে।

মিলে যাওয়া পথ

ক্লাউড স্টোরেজ সিকিউরিটি রুলস match ফাইল পাথ Cloud Storage এ ফাইলগুলি অ্যাক্সেস করতে ব্যবহৃত। বিধি করতে match সঠিক পথ বা ওয়াইল্ডকার্ড পথ, এবং নিয়ম এছাড়াও নেস্টেড করা যেতে পারে। কোনো মিল নিয়ম একটি অনুরোধ পদ্ধতি, অথবা শর্ত মূল্যায়ণ পারবেন যদি false , অনুরোধ অস্বীকার করা হয়।

হুবহু মিল

// Exact match for "images/profilePhoto.png"
match /images/profilePhoto.png {
  allow write: if <condition>;
}

// Exact match for "images/croppedProfilePhoto.png"
match /images/croppedProfilePhoto.png {
  allow write: if <other_condition>;
}

নেস্টেড ম্যাচ

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/profilePhoto.png"
  match /profilePhoto.png {
    allow write: if <condition>;
  }

  // Exact match for "images/croppedProfilePhoto.png"
  match /croppedProfilePhoto.png {
    allow write: if <other_condition>;
  }
}

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

বিধি এছাড়াও ব্যবহার করা যেতে পারে match একটি প্যাটার্ন ওয়াইল্ডকার্ড ব্যবহার করে। একটি ওয়াইল্ড কার্ড একটি নামাঙ্কিত পরিবর্তনশীল যে হয় যেমন একটি একক পংক্তি প্রতিনিধিত্ব করে profilePhoto.png , বা এই ধরনের একাধিক পাথ অংশ, images/profilePhoto.png

একটি ওয়াইল্ড কার্ড মত ওয়াইল্ডকার্ড নাম প্রায় কোঁকড়া ধনুর্বন্ধনী যোগ দ্বারা তৈরি করা হয় {string} । একটি একাধিক সেগমেন্ট ওয়াইল্ডকার্ড যোগ করে ঘোষিত হতে পারে =** , ওয়াইল্ডকার্ড নামের মত {path=**} :

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/*"
  // e.g. images/profilePhoto.png is matched
  match /{imageId} {
    // This rule only matches a single path segment (*)
    // imageId is a string that contains the specific segment matched
    allow read: if <condition>;
  }

  // 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 সব নিয়ম মূল্যায়ন ফল হয়। অর্থাৎ কোনো নিয়ম যদি ফাইলে evalutes সাথে মেলে true , ফল true

উপরে নিয়মে ফাইল "ইমেজ / profilePhoto.png" যদি পারেন পড়া যায় condition বা other_condition সত্য নির্ণয় করা, যখন ফাইল "ইমেজ / ব্যবহারকারীরা / ব্যবহারকারী: 12345 / profilePhoto.png" ফল একমাত্র সাপেক্ষে other_condition

একটি ওয়াইল্ড কার্ড পরিবর্তনশীল মধ্যে থেকে উল্লেখিত যাবে match ফাইলের নাম বা পথ অনুমোদন প্রদান:

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

ক্লাউড স্টোরেজ সিকিউরিটি রুলস ক্যাসকেড হয় না, এবং নিয়মগুলি কেবল তখনই মূল্যায়ন করা হয় যখন রিকোয়েস্ট পাথ নির্দিষ্ট নিয়মগুলির সাথে একটি পাথের সাথে মেলে।

মূল্যায়নের জন্য অনুরোধ করুন

আপলোড, ডাউনলোড, মেটাডেটা পরিবর্তন এবং মোছাগুলিকে ব্যবহার মূল্যায়ন করা হয় request ক্লাউড স্টোরেজ পাঠানো হয়েছে। request পরিবর্তনশীল ফাইল পাথ যেখানে অনুরোধ সম্পাদিত হচ্ছে, যখন অনুরোধ গৃহীত হয়, এবং নতুন ধারণ resource যদি অনুরোধে কোনো লিখুন মান। HTTP হেডার এবং প্রমাণীকরণ অবস্থাও অন্তর্ভুক্ত করা হয়েছে।

request বস্তুর ব্যবহারকারীর অনন্য আইডি এবং মধ্যে Firebase প্রমাণীকরণ পে লোড রয়েছে request.auth বস্তু, যার আরও ব্যাখ্যা করা হবে প্রমাণীকরণ ডক্সের অধ্যায়।

এ সম্পত্তি এর একটি পূর্ণ তালিকা request বস্তুর নিচে পাওয়া যায়:

সম্পত্তি প্রকার বর্ণনা
auth মানচিত্র <string, string> একটি ব্যবহারকারী লগ ইন থাকলেও, উপলব্ধ যখন uid , ব্যবহারকারীর অনন্য আইডি, এবং token , Firebase প্রমাণীকরণ JWT দাবির একটি মানচিত্র। অন্যথায়, এটি হতে হবে null
params মানচিত্র <string, string> অনুরোধের ক্যোয়ারী প্যারামিটার সম্বলিত মানচিত্র।
path পথ একটি path পাথ অনুরোধে সঞ্চালিত হচ্ছে উপস্থাপন করে।
resource মানচিত্র <string, string> নতুন রিসোর্স মান, শুধুমাত্র উপস্থিত write অনুরোধ।
time টাইমস্ট্যাম্প একটি টাইমস্ট্যাম্প যা সার্ভারের সময় উপস্থাপন করে অনুরোধটি মূল্যায়ন করা হয়।

সম্পদ মূল্যায়ন

নিয়মগুলি মূল্যায়ন করার সময়, আপনি আপলোড, ডাউনলোড, সংশোধিত বা মুছে ফেলা ফাইলটির মেটাডেটা মূল্যায়ন করতে চাইতে পারেন। এটি আপনাকে জটিল এবং শক্তিশালী নিয়ম তৈরি করতে দেয় যা এমন কিছু করে যা কেবলমাত্র নির্দিষ্ট বিষয়বস্তুর প্রকারের ফাইলগুলি আপলোড করার অনুমতি দেয়, অথবা নির্দিষ্ট আকারের চেয়ে বড় ফাইলগুলি মুছে ফেলার অনুমতি দেয়।

ক্লাউড স্টোরেজ জন্য Firebase সিকিউরিটি রুলস ফাইল মেটাডাটা প্রদান করে resource বস্তু, যার মেটাডেটা চাবি / মান জোড়া একটি ক্লাউড স্টোরেজ বস্তু surfaced ধারণ করে। এই বৈশিষ্ট্য পরিদর্শন করা যেতে পারে read বা write অনুরোধ তথ্য অখণ্ডতা নিশ্চিত করতে হবে।

উপর write অনুরোধ (যেমন আপলোড, মেটাডাটা আপডেট, এবং মোছাগুলিকে হিসাবে), ছাড়াও resource বস্তু, যার ফাইল বর্তমানে বিদ্যমান অনুরোধ পথ এ, এছাড়াও আপনি ব্যবহার করার ক্ষমতা আছে তাদের জন্য ফাইলগুলির মেটাডেটা রয়েছে request.resource বস্তু, যা লেখার অনুমতি থাকলে ফাইল মেটাডেটার একটি উপসেট লিখতে হবে। আপনি ডেটা অখণ্ডতা নিশ্চিত করতে বা ফাইলের ধরন বা আকারের মতো অ্যাপ্লিকেশন সীমাবদ্ধতা প্রয়োগ করতে এই দুটি মান ব্যবহার করতে পারেন।

এ সম্পত্তি এর একটি পূর্ণ তালিকা resource বস্তুর নিচে পাওয়া যায়:

সম্পত্তি প্রকার বর্ণনা
name স্ট্রিং বস্তুর পুরো নাম
bucket স্ট্রিং এই বস্তুর নাম যে বস্তুর মধ্যে থাকে।
generation int Google মেঘ সংগ্রহস্থল বস্তুর প্রজন্ম এই বস্তুর।
metageneration int Google মেঘ সংগ্রহস্থল বস্তুর metageneration এই বস্তুর।
size int বাইটে বস্তুর আকার।
timeCreated টাইমস্ট্যাম্প একটি বস্তু তৈরি হওয়ার সময়কে উপস্থাপন করে একটি টাইমস্ট্যাম্প।
updated টাইমস্ট্যাম্প একটি বস্তু সর্বশেষ আপডেট করা সময় প্রতিনিধিত্বকারী একটি টাইমস্ট্যাম্প।
md5Hash স্ট্রিং বস্তুর একটি MD5 হ্যাশ।
crc32c স্ট্রিং বস্তুর একটি crc32c হ্যাশ।
etag স্ট্রিং এই বস্তুর সাথে যুক্ত etag।
contentDisposition স্ট্রিং এই বস্তুর সাথে যুক্ত বিষয়বস্তু স্বভাব।
contentEncoding স্ট্রিং এই বস্তুর সাথে সম্পর্কিত বিষয়বস্তু এনকোডিং।
contentLanguage স্ট্রিং এই বস্তুর সাথে যুক্ত বিষয়বস্তু ভাষা।
contentType স্ট্রিং এই বস্তুর সাথে যুক্ত বিষয়বস্তুর ধরন।
metadata মানচিত্র <string, string> কী/মান জোড়া অতিরিক্ত, ডেভেলপার নির্দিষ্ট কাস্টম মেটাডেটা।

request.resource বাদ দিয়ে এই সব রয়েছে generation , metageneration , etag , timeCreated , এবং updated

সম্পূর্ণ উদাহরণ

সবকিছু একসাথে রেখে, আপনি একটি চিত্র স্টোরেজ সমাধানের জন্য নিয়মগুলির একটি সম্পূর্ণ উদাহরণ তৈরি করতে পারেন:

service firebase.storage {
 match /b/{bucket}/o {
   match /images {
     // Cascade read to any image type at any path
     match /{allImages=**} {
       allow read;
     }

     // Allow write files to the path "images/*", subject to the constraints:
     // 1) File is less than 5MB
     // 2) Content type is an image
     // 3) Uploaded content type matches existing content type
     // 4) File name (stored in imageId wildcard variable) is less than 32 characters
     match /{imageId} {
       allow write: if request.resource.size < 5 * 1024 * 1024
                    && request.resource.contentType.matches('image/.*')
                    && request.resource.contentType == resource.contentType
                    && imageId.size() < 32
     }
   }
 }
}

রিয়েলটাইম ডাটাবেস

মৌলিক গঠন

রিয়েলটাইম ডাটাবেসে, ফায়ারবেস সিকিউরিটি রুলস একটি JSON ডকুমেন্টে থাকা জাভাস্ক্রিপ্ট-এর মত এক্সপ্রেশন নিয়ে গঠিত।

তারা নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:

{
  "rules": {
    "<<path>>": {
    // Allow the request if the condition for each method is true.
      ".read": <<condition>>,
      ".write": <<condition>>,
      ".validate": <<condition>>
    }
  }
}

নিয়মটিতে তিনটি মৌলিক উপাদান রয়েছে:

  • পথ: ডাটাবেসের অবস্থান। এটি আপনার ডাটাবেসের JSON গঠন মিরর করে।
  • অনুরোধ: এই পদ্ধতির নিয়ম ব্যবহারসমূহ অ্যাক্সেস মঞ্জুর করতে চলেছেন। read এবং write নিয়ম, বিস্তৃত পড়া এবং লেখার অ্যাক্সেস মঞ্জুর করার সময় validate নিয়ম ইনকামিং বা বিদ্যমান ডাটার উপর ভিত্তি করে অ্যাক্সেসের মঞ্জুরি দিন করতে একটি গৌণ যাচাইকরণ হিসেবে কাজ করে।
  • কন্ডিশন: এই শর্তে যে একটি অনুরোধ অনুমতি দেয় যদি এটি সত্য মূল্যায়ন করে।

পথের ক্ষেত্রে নিয়ম কিভাবে প্রযোজ্য

রিয়েলটাইম ডাটাবেসে, নিয়মগুলি পরমাণুভাবে প্রযোজ্য, যার অর্থ হল উচ্চ স্তরের প্যারেন্ট নোডগুলিতে নিয়মগুলি আরও দানাদার চাইল্ড নোডগুলিতে নিয়মগুলি অতিক্রম করে এবং গভীর নোডের নিয়মগুলি পিতামাতার পথে অ্যাক্সেস দিতে পারে না। আপনার ডাটাবেস কাঠামোর একটি গভীর পথে আপনি অ্যাক্সেসকে পরিমার্জিত বা বাতিল করতে পারবেন না যদি আপনি ইতিমধ্যেই এটি একটি মূল পথের জন্য অনুমোদন করে থাকেন।

নিম্নলিখিত নিয়মগুলি বিবেচনা করুন:

{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          // ignored, since read was allowed already
          ".read": false
        }
     }
  }
}

এই নিরাপত্তা কাঠামো অনুমতি দেয় /bar/ যখনই থেকে পড়তে হবে /foo/ একটি শিশুর রয়েছে baz মান true".read": false অধীনে নিয়ম /foo/bar/ যেহেতু এক্সেস একটি শিশু পথ কতৃক প্রত্যাহার করা যাবে না কোনো প্রভাব এখানে আছে।

যদিও এটি তাত্ক্ষণিকভাবে স্বজ্ঞাত নাও মনে হতে পারে, এটি নিয়ম ভাষার একটি শক্তিশালী অংশ এবং ন্যূনতম প্রচেষ্টার সাথে খুব জটিল অ্যাক্সেস সুবিধাগুলি প্রয়োগ করার অনুমতি দেয়। এই জন্য বিশেষভাবে উপকারী ব্যবহারকারী ভিত্তিক নিরাপত্তা

যাইহোক, .validate নিয়ম নির্ঝর না। সমস্ত বৈধ নিয়মগুলি অনুক্রমের সমস্ত স্তরে সন্তুষ্ট হতে হবে যাতে একটি লেখার অনুমতি দেওয়া হয়।

অতিরিক্তভাবে, যেহেতু প্যারেন্ট পাথে নিয়মগুলি প্রযোজ্য হয় না, তাই অনুরোধকৃত স্থানে বা অ্যাক্সেস মঞ্জুর করে এমন প্যারেন্ট লোকেশনে নিয়ম না থাকলে পড়া বা লেখা অপারেশন ব্যর্থ হয়। এমনকি যদি প্রতিটি ক্ষতিগ্রস্ত শিশু পথ অ্যাক্সেসযোগ্য হয়, পিতামাতার অবস্থানে পড়া সম্পূর্ণরূপে ব্যর্থ হবে। এই কাঠামোটি বিবেচনা করুন:

{
  "rules": {
    "records": {
      "rec1": {
        ".read": true
      },
      "rec2": {
        ".read": false
      }
    }
  }
}

বুঝতে নিয়ম atomically মূল্যায়ন করা হয় ছাড়া, আনার সময় মত মনে হতে পারে /records/ পাথ ফিরে আসবে rec1 কিন্তু rec2 । প্রকৃত ফলাফল, তবে, একটি ত্রুটি:

জাভাস্ক্রিপ্ট
var db = firebase.database();
db.ref("records").once("value", function(snap) {
  // success method is not called
}, function(err) {
  // error callback triggered with PERMISSION_DENIED
});
উদ্দেশ্য গ
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[_ref child:@"records"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
  // success block is not called
} withCancelBlock:^(NSError * _Nonnull error) {
  // cancel block triggered with PERMISSION_DENIED
}];
সুইফট
var ref = FIRDatabase.database().reference()
ref.child("records").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // success block is not called
}, withCancelBlock: { error in
    // cancel block triggered with PERMISSION_DENIED
})
জাভা
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // success method is not called
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback triggered with PERMISSION_DENIED
  });
});
বিশ্রাম
curl https://docs-examples.firebaseio.com/rest/records/
# response returns a PERMISSION_DENIED error

পড়া অপারেশন যেহেতু /records/ পারমাণবিক, এবং সেখানে কোন পঠিত নিয়ম যে মধ্যে থাকা সমস্ত ডেটা থেকে অ্যাক্সেসের মঞ্জুরি দেওয়া হচ্ছে /records/ , এই একটি নিক্ষেপ করা হবে PERMISSION_DENIED ত্রুটি। আমরা আমাদের নিরাপত্তা কাল্পনিক এই নিয়ম মূল্যায়ন যদি Firebase কনসোল , আমরা দেখতে পারেন পঠিত অপারেশন অস্বীকার করা হয়েছিল:

Attempt to read /records with auth=Success(null)
    /
    /records

No .read rule allowed the operation.
Read was denied.

কারণ পঠিত নিয়ম অনুমতি এক্সেস অপারেশন অস্বীকার করা হয়েছিল /records/ পাথ, কিন্তু নোট যে জন্য নিয়ম rec1 কারণ এটি পাথ আমরা অনুরোধ ছিল না মূল্যায়ন ছিল না। আনতে rec1 আমরা সরাসরি এটি অ্যাক্সেস করতে হবে:

জাভাস্ক্রিপ্ট
var db = firebase.database();
db.ref("records/rec1").once("value", function(snap) {
  // SUCCESS!
}, function(err) {
  // error callback is not called
});
উদ্দেশ্য গ
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[ref child:@"records/rec1"] observeSingleEventOfType:FEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
    // SUCCESS!
}];
সুইফট
var ref = FIRDatabase.database().reference()
ref.child("records/rec1").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // SUCCESS!
})
জাভা
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records/rec1");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // SUCCESS!
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback is not called
  }
});
বিশ্রাম
curl https://docs-examples.firebaseio.com/rest/records/rec1
# SUCCESS!

অবস্থান পরিবর্তনশীল

রিয়েলটাইম ডাটাবেস রুলস একটি সহায়তা $location পরিবর্তনশীল পথ অংশ মেলে। ব্যবহার করুন $ পথ বরাবর কোন সন্তান নোড আপনার নিয়ম মেলে আপনার পাথ সেগমেন্ট সামনে উপসর্গ।

  {
    "rules": {
      "rooms": {
        // This rule applies to any child of /rooms/, the key for each room id
        // is stored inside $room_id variable for reference
        "$room_id": {
          "topic": {
            // The room's topic can be changed if the room id has "public" in it
            ".write": "$room_id.contains('public')"
          }
        }
      }
    }
  }

এছাড়াও আপনি ব্যবহার করতে পারেন $variable ধ্রুবক পথ নামের সাথে সমান্তরাল ভাবে।

  {
    "rules": {
      "widget": {
        // a widget can have a title or color attribute
        "title": { ".validate": true },
        "color": { ".validate": true },

        // but no other child paths are allowed
        // in this case, $other means any key excluding "title" and "color"
        "$other": { ".validate": false }
      }
    }
  }