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

সুরক্ষা বিধি ভাষা

ফায়ারবেস সিকিউরিটি রুলস নমনীয়, শক্তিশালী, কাস্টম ল্যাঙ্গুয়েজ ব্যবহার করে যা বিস্তৃত জটিলতা এবং গ্রানুলারিটি সমর্থন করে। আপনি আপনার নিয়মগুলিকে সুনির্দিষ্ট বা সাধারণ হিসাবে আপনার অ্যাপের জন্য বোধগম্য করতে পারেন। রিয়েলটাইম ডাটাবেসের নিয়মগুলি একটি সিনট্যাক্স ব্যবহার করে যা JSON কাঠামোতে জাভাস্ক্রিপ্টের মতো দেখায়। ক্লাউড Firestore এবং ক্লাউড স্টোরেজ নিয়ম উপর ভিত্তি করে একটি ভাষা ব্যবহার প্রচলিত মত প্রকাশের ভাষা (cel) সঙ্গে cel উপর তৈরী করে যে, match এবং allow বিবৃতি যে সমর্থন শর্তসাপেক্ষে অ্যাক্সেস নিশ্চিত করেছেন।

কারণ এগুলো কাস্টম ল্যাঙ্গুয়েজ, তবে, এখানে একটি লার্নিং কার্ভ আছে। আপনি আরো জটিল নিয়মের গভীরে asুকতে গিয়ে নিয়ম ভাষা ভালভাবে বুঝতে এই নির্দেশিকাটি ব্যবহার করুন।

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

মৌলিক গঠন

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

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

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 বিবৃতি, যা একটি শর্তে যে একটি অনুরোধ অনুমতি দেয় যদি এটি সত্য মূল্যায়ণ অন্তর্ভুক্ত করা হয়েছে।

এই ধারণাগুলির প্রতিটি নীচে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে।

মেঘ স্টোরেজ

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

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 বিবৃতি, যা একটি শর্তে যে একটি অনুরোধ অনুমতি দেয় যদি এটি সত্য মূল্যায়ণ অন্তর্ভুক্ত করা হয়েছে।

এই ধারণাগুলির প্রতিটি নীচে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে।

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

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

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

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

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

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

নিয়ম গঠন

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

ক্লাউড ফায়ারস্টোর এবং ক্লাউড স্টোরেজে একটি নিয়মের মৌলিক উপাদান নিম্নরূপ:

  • service ঘোষণা: Firebase পণ্যের নিয়ম প্রযোজ্য বলছেন।
  • match ব্লক: সংজ্ঞায়িত ডাটাবেসের বা স্টোরেজ বালতি নিয়ম প্রযোজ্য একটি পথ।
  • allow বিবৃতি: দেওয়া অ্যাক্সেসের জন্য শর্ত, পদ্ধতি দ্বারা পৃথকীকৃত প্রদান করে। সমর্থিত পদ্ধতিগুলোর মধ্যে রয়েছে: get , list , create , update , delete , এবং সুবিধা পদ্ধতি read এবং write
  • ঐচ্ছিক function ঘোষণা: একাধিক নিয়ম জুড়ে ব্যবহারের জন্য একত্রিত এবং শর্ত মোড়ানো করার ক্ষমতা প্রদান করে।

service এক বা একাধিক রয়েছে match সঙ্গে ব্লক allow বিবৃতি যে অনুরোধ অ্যাক্সেস শর্ত প্রদান। request এবং resource ভেরিয়েবল নিয়ম অবস্থায় ব্যবহারের জন্য পাওয়া যায়। Firebase সিকিউরিটি রুলস ভাষাও সমর্থন function ঘোষণা।

সিনট্যাক্স সংস্করণ

syntax বিবৃতি উৎস লেখার জন্য ব্যবহৃত Firebase বিধি ভাষা সংস্করণ নির্দেশ করে। ভাষা সর্বশেষ সংস্করণ v2

rules_version = '2';
service cloud.firestore {
...
}

কোন যদি rules_version বিবৃতি সরবরাহ করা হয়, আপনার নিয়ম চালু করে মূল্যায়ন করা হবে v1 ইঞ্জিন।

সেবা

service ঘোষণা সংজ্ঞায়িত যা Firebase পণ্য, বা সেবা, আপনার নিয়ম প্রযোজ্য হবে। আপনি শুধুমাত্র একটি অন্তর্ভুক্ত করতে পারে service উৎস ফাইল প্রতি ঘোষণা।

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

service cloud.firestore {
 // Your 'match' blocks with their corresponding 'allow' statements and
 // optional 'function' declarations are contained here
}

মেঘ স্টোরেজ

service firebase.storage {
  // Your 'match' blocks with their corresponding 'allow' statements and
  // optional 'function' declarations are contained here
}

আপনি যদি Firebase CLI ব্যবহার করে ক্লাউড ফায়ারস্টোর এবং ক্লাউড স্টোরেজ উভয়ের জন্য নিয়ম সংজ্ঞায়িত করেন, তাহলে আপনাকে সেগুলিকে আলাদা ফাইলে বজায় রাখতে হবে।

ম্যাচ

একটি match ব্লক একটি ঘোষণা path প্যাটার্ন যে অনুরোধ অপারেশন জন্য পথ বিরুদ্ধে মিলেছে হয় (ইনকামিং request.path )। লাশ match এক বা একাধিক নেস্টেড থাকতে হবে match ব্লক, allow বিবৃতি, বা function ঘোষণা। নেস্টেড মধ্যে পাথ match ব্লক পিতা বা মাতা মধ্যে পথে আপেক্ষিক match ব্লক।

path প্যাটার্ন একটি ডিরেক্টরি মত নাম ভেরিয়েবল বা ওয়াইল্ডকার্ডগুলি অন্তর্ভুক্ত হতে পারে। path প্যাটার্ন একক পাথ সেগমেন্ট এবং মাল্টি-পাথ সেগমেন্ট মিলের জন্য অনুমতি দেয়। একটি বাঁধা কোন ভেরিয়েবল path মধ্যে দৃশ্যমান match সুযোগ বা কোনো নেস্টেড সুযোগ যেখানে path ঘোষিত হয়।

একটি বিরুদ্ধে ম্যাচ path প্যাটার্ন আংশিক বা সম্পূর্ণ হতে পারে:

  • আংশিক মিল: path প্যাটার্ন একটি উপসর্গ ম্যাচ হয় request.path
  • সম্পূর্ণ ম্যাচ: path প্যাটার্ন সমগ্র মিলে যায় request.path

যখন একটি সম্পূর্ণ ম্যাচ তৈরি করা হয় ব্লকের মধ্যে নিয়ম মূল্যায়ন করা হয়। যখন একটি আংশিক মিল তৈরি করা হয় নেস্টেড match নিয়ম দেখুন কিনা কোনো নেস্টেড পরীক্ষা path ম্যাচ সম্পন্ন করা হবে।

প্রতিটি সম্পূর্ণ নিয়ম match নির্ধারণ করতে অনুরোধ অনুমতি কিনা মূল্যায়ন করা হয়। যদি কোনো মিলে যাওয়া নিয়ম অ্যাক্সেস দেয়, অনুরোধ অনুমোদিত। যদি কোন মিলের নিয়ম অ্যাক্সেস মঞ্জুর না করে, অনুরোধটি অস্বীকার করা হয়।

// Given request.path == /example/hello/nested/path the following
// declarations indicate whether they are a partial or complete match and
// the value of any variables visible within the scope.
service firebase.storage {
  // Partial match.
  match /example/{singleSegment} {   // `singleSegment` == 'hello'
    allow write;                     // Write rule not evaluated.
    // Complete match.
    match /nested/path {             // `singleSegment` visible in scope.
      allow read;                    // Read rule is evaluated.
    }
  }
  // Complete match.
  match /example/{multiSegment=**} { // `multiSegment` == /hello/nested/path
    allow read;                      // Read rule is evaluated.
  }
}

শো উপরে উদাহরণ হিসাবে, path ঘোষণা নিম্নলিখিত যেকোনো একটি ভেরিয়েবল সমর্থন করে:

  • একক-সেগমেন্ট ওয়াইল্ডকার্ড: একটি ওয়াইল্ড কার্ড পরিবর্তনশীল কোঁকড়া ধনুর্বন্ধনী একটি পরিবর্তনশীল মোড়কে দ্বারা একটি পাথ ঘোষিত হয় {variable} । এই পরিবর্তনশীল মধ্যে প্রবেশযোগ্য match হিসেবে বিবৃতি string
  • Recursive ওয়াইল্ডকার্ড: Recursive, অথবা বহু-সেগমেন্ট, ওয়াইল্ডকার্ড ম্যাচ বা একটি পাথ নিচে একাধিক পাথ অংশ। এই ওয়াইল্ডকার্ডটি আপনি যে অবস্থানে সেট করেছেন তার নীচের সমস্ত পথের সাথে মেলে। আপনি যোগ করে ডিক্লেয়ার করতে পারেন এটি =** আপনার সেগমেন্ট পরিবর্তনশীল শেষে: STRING {variable=**} । এই পরিবর্তনশীল মধ্যে প্রবেশযোগ্য match হিসেবে বিবৃতি path অবজেক্ট।

অনুমতি দিন

match ব্লক এক বা একাধিক রয়েছে allow বিবৃতি। এগুলি আপনার প্রকৃত নিয়ম। আপনি আবেদন করতে পারেন allow এক বা একাধিক পদ্ধতি নিয়ম। একটি অন অবস্থার allow ক্লাউড Firestore বা ক্লাউড স্টোরেজ কোন ইনকামিং অনুরোধ দেওয়ার বিবৃতি সত্য নির্ণয় আবশ্যক। এছাড়াও আপনি লিখতে পারেন allow শর্ত ছাড়াই বিবৃতি, উদাহরণস্বরূপ, allow read । যদি allow বিবৃতি একটি শর্ত অন্তর্ভুক্ত নয় যদিও, সবসময় যে পদ্ধতি জন্য অনুরোধ করতে পারবেন।

যদি কোনো allow পদ্ধতির জন্য নিয়ম সন্তুষ্ট হলে, অনুরোধ অনুমোদিত হয়। উপরন্তু, যদি একটি বৃহত্তর নিয়ম অ্যাক্সেস প্রদান করে, নিয়মগুলি অ্যাক্সেস প্রদান করে এবং অ্যাক্সেস সীমাবদ্ধ করতে পারে এমন আরও দানাদার নিয়ম উপেক্ষা করে।

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

service firebase.storage {
  // Allow the requestor to read or delete any resource on a path under the
  // user directory.
  match /users/{userId}/{anyUserFile=**} {
    allow read, delete: if request.auth != null && request.auth.uid == userId;
  }

  // Allow the requestor to create or update their own images.
  // When 'request.method' == 'delete' this rule and the one matching
  // any path under the user directory would both match and the `delete`
  // would be permitted.

  match /users/{userId}/images/{imageId} {
    // Whether to permit the request depends on the logical OR of all
    // matched rules. This means that even if this rule did not explicitly
    // allow the 'delete' the earlier rule would have.
    allow write: if request.auth != null && request.auth.uid == userId && imageId.matches('*.png');
  }
}

পদ্ধতি

প্রতিটি allow বিবৃতি একটি পদ্ধতি যে একই পদ্ধতির ইনকামিং অনুরোধের জন্য প্রবেশের সুযোগ প্রদান করে অন্তর্ভুক্ত করা হয়েছে।

পদ্ধতি অনুরোধের ধরন
সুবিধার পদ্ধতি
read যে কোন ধরনের পড়ার অনুরোধ
write যেকোন ধরনের লেখার অনুরোধ
স্ট্যান্ডার্ড পদ্ধতি
get একক নথি বা ফাইলের জন্য অনুরোধ পড়ুন
list প্রশ্ন এবং সংগ্রহের জন্য অনুরোধ পড়ুন
create নতুন নথি বা ফাইল লিখুন
update বিদ্যমান ডাটাবেস নথিতে লিখুন বা ফাইল মেটাডেটা আপডেট করুন
delete ডেটা মুছুন

আপনি ওভারল্যাপ একই পদ্ধতি পড়তে পারে না match একই ব্লক বা লেখার পদ্ধতি পরস্পরবিরোধী path ঘোষণা।

উদাহরণস্বরূপ, নিম্নলিখিত নিয়মগুলি ব্যর্থ হবে:

service bad.example {
  match /rules/with/overlapping/methods {
    // This rule allows reads to all authenticated users
    allow read: if request.auth != null;

    match another/subpath {
      // This secondary, more specific read rule causes an error
      allow get: if request.auth != null && request.auth.uid == "me";
      // Overlapping write methods in the same path cause an error as well
      allow write: if request.auth != null;
      allow create: if request.auth != null && request.auth.uid == "me";
    }
  }
}

ফাংশন

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

  • কার্যাবলী শুধুমাত্র একটি একক ধারণ করতে পারে return বিবৃতি। তারা কোন অতিরিক্ত যুক্তি ধারণ করতে পারে না। উদাহরণস্বরূপ, তারা লুপ চালাতে পারে না বা বাহ্যিক পরিষেবাগুলিতে কল করতে পারে না।
  • ফাংশনগুলি স্বয়ংক্রিয়ভাবে ফাংশন এবং ভেরিয়েবলগুলিকে যে সুযোগে সংজ্ঞায়িত করা হয়েছে সেখান থেকে অ্যাক্সেস করতে পারে। উদাহরণস্বরূপ, একটি ফাংশন মধ্যে সংজ্ঞায়িত service cloud.firestore সুযোগ অ্যাক্সেস আছে resource এবং বিল্ট-ইন ফাংশন যেমন পরিবর্তনশীল get() এবং exists()
  • ফাংশন অন্যান্য ফাংশন কল করতে পারে কিন্তু recurse নাও হতে পারে। মোট কল স্ট্যাক গভীরতা 20 সীমাবদ্ধ।
  • নিয়ম সংস্করণে v2 , ফাংশন ব্যবহার করে ভেরিয়েবল নির্ধারণ করতে পারবেন let শব্দ। ফাংশনে 10 টি পর্যন্ত বাইন্ডিং থাকতে পারে, কিন্তু একটি রিটার্ন স্টেটমেন্ট দিয়ে শেষ করতে হবে।

একটি ফাংশন সংজ্ঞায়িত করা হয় function শব্দ এবং শূন্য বা তার বেশি আর্গুমেন্ট লাগে। উদাহরণস্বরূপ, আপনি উপরের উদাহরণগুলিতে ব্যবহৃত দুটি ধরণের শর্তকে একক ফাংশনে একত্রিত করতে চাইতে পারেন:

service cloud.firestore {
  match /databases/{database}/documents {
    // 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 /cities/{city} {
      allow read, write: if signedInOrPublic();
    }

    match /users/{user} {
      allow read, write: if signedInOrPublic();
    }
  }
}

এখানে একটি উদাহরণ ফাংশন আর্গুমেন্ট দেখানো এবং কাজ দেওয়া যাক। অ্যাসাইনমেন্ট স্টেটমেন্টগুলিকে সেমি-কোলন দ্বারা আলাদা করা উচিত।

function isAuthorOrAdmin(userId, article) {
  let isAuthor = article.author == userId;
  let isAdmin = exists(/databases/$(database)/documents/admins/$(userId));
  return isAuthor || isAdmin;
}

উল্লেখ্য কিভাবে isAdmin নিয়োগ প্রশাসক সংগ্রহে একটি লুকআপ enforces। অপ্রয়োজনীয় লুক-ছাড়াই অলস মূল্যায়ন স্বরূপ, এর শর্ট-সার্কিট প্রকৃতি সদ্ব্যবহার && (এবং) এবং || (বা) তুলনা একটি দ্বিতীয় ফাংশন শুধুমাত্র যদি কল isAuthor সত্য হতে পারে (জন্য প্রদর্শিত হয় && তুলনা) অথবা মিথ্যা (জন্য || তুলনা)।

function isAdmin(userId) {
  return exists(/databases/$(database)/documents/admins/$(userId));
}
function isAuthorOrAdmin(userId, article) {
  let isAuthor = article.author == userId;
  // `||` is short-circuiting; isAdmin called only if isAuthor == false.
  return isAuthor || isAdmin(userId);
}

আপনার নিরাপত্তা বিধিমালায় ফাংশন ব্যবহার করলে সেগুলি আরও রক্ষণাবেক্ষণযোগ্য হয় কারণ আপনার নিয়মগুলির জটিলতা বৃদ্ধি পায়।

মেঘ স্টোরেজ

ক্লাউড ফায়ারস্টোর এবং ক্লাউড স্টোরেজে একটি নিয়মের মৌলিক উপাদান নিম্নরূপ:

  • service ঘোষণা: Firebase পণ্যের নিয়ম প্রযোজ্য বলছেন।
  • match ব্লক: সংজ্ঞায়িত ডাটাবেসের বা স্টোরেজ বালতি নিয়ম প্রযোজ্য একটি পথ।
  • allow বিবৃতি: দেওয়া অ্যাক্সেসের জন্য শর্ত, পদ্ধতি দ্বারা পৃথকীকৃত প্রদান করে। সমর্থিত পদ্ধতিগুলোর মধ্যে রয়েছে: get , list , create , update , delete , এবং সুবিধা পদ্ধতি read এবং write
  • ঐচ্ছিক function ঘোষণা: একাধিক নিয়ম জুড়ে ব্যবহারের জন্য একত্রিত এবং শর্ত মোড়ানো করার ক্ষমতা প্রদান করে।

service এক বা একাধিক রয়েছে match সঙ্গে ব্লক allow বিবৃতি যে অনুরোধ অ্যাক্সেস শর্ত প্রদান। request এবং resource ভেরিয়েবল নিয়ম অবস্থায় ব্যবহারের জন্য পাওয়া যায়। Firebase সিকিউরিটি রুলস ভাষাও সমর্থন function ঘোষণা।

সিনট্যাক্স সংস্করণ

syntax বিবৃতি উৎস লেখার জন্য ব্যবহৃত Firebase বিধি ভাষা সংস্করণ নির্দেশ করে। ভাষা সর্বশেষ সংস্করণ v2

rules_version = '2';
service cloud.firestore {
...
}

কোন যদি rules_version বিবৃতি সরবরাহ করা হয়, আপনার নিয়ম চালু করে মূল্যায়ন করা হবে v1 ইঞ্জিন।

সেবা

service ঘোষণা সংজ্ঞায়িত যা Firebase পণ্য, বা সেবা, আপনার নিয়ম প্রযোজ্য হবে। আপনি শুধুমাত্র একটি অন্তর্ভুক্ত করতে পারে service উৎস ফাইল প্রতি ঘোষণা।

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

service cloud.firestore {
 // Your 'match' blocks with their corresponding 'allow' statements and
 // optional 'function' declarations are contained here
}

মেঘ স্টোরেজ

service firebase.storage {
  // Your 'match' blocks with their corresponding 'allow' statements and
  // optional 'function' declarations are contained here
}

আপনি যদি Firebase CLI ব্যবহার করে ক্লাউড ফায়ারস্টোর এবং ক্লাউড স্টোরেজ উভয়ের জন্য নিয়ম সংজ্ঞায়িত করেন, তাহলে আপনাকে সেগুলিকে আলাদা ফাইলে বজায় রাখতে হবে।

ম্যাচ

একটি match ব্লক একটি ঘোষণা path প্যাটার্ন যে অনুরোধ অপারেশন জন্য পথ বিরুদ্ধে মিলেছে হয় (ইনকামিং request.path )। লাশ match এক বা একাধিক নেস্টেড থাকতে হবে match ব্লক, allow বিবৃতি, বা function ঘোষণা। নেস্টেড মধ্যে পাথ match ব্লক পিতা বা মাতা মধ্যে পথে আপেক্ষিক match ব্লক।

path প্যাটার্ন একটি ডিরেক্টরি মত নাম ভেরিয়েবল বা ওয়াইল্ডকার্ডগুলি অন্তর্ভুক্ত হতে পারে। path প্যাটার্ন একক পাথ সেগমেন্ট এবং মাল্টি-পাথ সেগমেন্ট মিলের জন্য অনুমতি দেয়। একটি বাঁধা কোন ভেরিয়েবল path মধ্যে দৃশ্যমান match সুযোগ বা কোনো নেস্টেড সুযোগ যেখানে path ঘোষিত হয়।

একটি বিরুদ্ধে ম্যাচ path প্যাটার্ন আংশিক বা সম্পূর্ণ হতে পারে:

  • আংশিক মিল: path প্যাটার্ন একটি উপসর্গ ম্যাচ হয় request.path
  • সম্পূর্ণ ম্যাচ: path প্যাটার্ন সমগ্র মিলে যায় request.path

যখন একটি সম্পূর্ণ ম্যাচ তৈরি করা হয় ব্লকের মধ্যে নিয়ম মূল্যায়ন করা হয়। যখন একটি আংশিক মিল তৈরি করা হয় নেস্টেড match নিয়ম দেখুন কিনা কোনো নেস্টেড পরীক্ষা path ম্যাচ সম্পন্ন করা হবে।

প্রতিটি সম্পূর্ণ নিয়ম match নির্ধারণ করতে অনুরোধ অনুমতি কিনা মূল্যায়ন করা হয়। যদি কোনো মিলে যাওয়া নিয়ম অ্যাক্সেস দেয়, অনুরোধ অনুমোদিত। যদি কোন মিলের নিয়ম অ্যাক্সেস মঞ্জুর না করে, অনুরোধটি অস্বীকার করা হয়।

// Given request.path == /example/hello/nested/path the following
// declarations indicate whether they are a partial or complete match and
// the value of any variables visible within the scope.
service firebase.storage {
  // Partial match.
  match /example/{singleSegment} {   // `singleSegment` == 'hello'
    allow write;                     // Write rule not evaluated.
    // Complete match.
    match /nested/path {             // `singleSegment` visible in scope.
      allow read;                    // Read rule is evaluated.
    }
  }
  // Complete match.
  match /example/{multiSegment=**} { // `multiSegment` == /hello/nested/path
    allow read;                      // Read rule is evaluated.
  }
}

শো উপরে উদাহরণ হিসাবে, path ঘোষণা নিম্নলিখিত যেকোনো একটি ভেরিয়েবল সমর্থন করে:

  • একক-সেগমেন্ট ওয়াইল্ডকার্ড: একটি ওয়াইল্ড কার্ড পরিবর্তনশীল কোঁকড়া ধনুর্বন্ধনী একটি পরিবর্তনশীল মোড়কে দ্বারা একটি পাথ ঘোষিত হয় {variable} । এই পরিবর্তনশীল মধ্যে প্রবেশযোগ্য match হিসেবে বিবৃতি string
  • Recursive ওয়াইল্ডকার্ড: Recursive, অথবা বহু-সেগমেন্ট, ওয়াইল্ডকার্ড ম্যাচ বা একটি পাথ নিচে একাধিক পাথ অংশ। এই ওয়াইল্ডকার্ডটি আপনি যে অবস্থানে সেট করেছেন তার নীচের সমস্ত পথের সাথে মেলে। আপনি যোগ করে ডিক্লেয়ার করতে পারেন এটি =** আপনার সেগমেন্ট পরিবর্তনশীল শেষে: STRING {variable=**} । এই পরিবর্তনশীল মধ্যে প্রবেশযোগ্য match হিসেবে বিবৃতি path অবজেক্ট।

অনুমতি দিন

match ব্লক এক বা একাধিক রয়েছে allow বিবৃতি। এগুলি আপনার প্রকৃত নিয়ম। আপনি আবেদন করতে পারেন allow এক বা একাধিক পদ্ধতি নিয়ম। একটি অন অবস্থার allow ক্লাউড Firestore বা ক্লাউড স্টোরেজ কোন ইনকামিং অনুরোধ দেওয়ার বিবৃতি সত্য নির্ণয় আবশ্যক। এছাড়াও আপনি লিখতে পারেন allow শর্ত ছাড়াই বিবৃতি, উদাহরণস্বরূপ, allow read । যদি allow বিবৃতি একটি শর্ত অন্তর্ভুক্ত নয় যদিও, সবসময় যে পদ্ধতি জন্য অনুরোধ করতে পারবেন।

যদি কোনো allow পদ্ধতির জন্য নিয়ম সন্তুষ্ট হলে, অনুরোধ অনুমোদিত হয়। উপরন্তু, যদি একটি বৃহত্তর নিয়ম অ্যাক্সেস প্রদান করে, নিয়মগুলি অ্যাক্সেস প্রদান করে এবং অ্যাক্সেস সীমাবদ্ধ করতে পারে এমন আরও দানাদার নিয়ম উপেক্ষা করে।

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

service firebase.storage {
  // Allow the requestor to read or delete any resource on a path under the
  // user directory.
  match /users/{userId}/{anyUserFile=**} {
    allow read, delete: if request.auth != null && request.auth.uid == userId;
  }

  // Allow the requestor to create or update their own images.
  // When 'request.method' == 'delete' this rule and the one matching
  // any path under the user directory would both match and the `delete`
  // would be permitted.

  match /users/{userId}/images/{imageId} {
    // Whether to permit the request depends on the logical OR of all
    // matched rules. This means that even if this rule did not explicitly
    // allow the 'delete' the earlier rule would have.
    allow write: if request.auth != null && request.auth.uid == userId && imageId.matches('*.png');
  }
}

পদ্ধতি

প্রতিটি allow বিবৃতি একটি পদ্ধতি যে একই পদ্ধতির ইনকামিং অনুরোধের জন্য প্রবেশের সুযোগ প্রদান করে অন্তর্ভুক্ত করা হয়েছে।

পদ্ধতি অনুরোধের ধরন
সুবিধার পদ্ধতি
read যে কোন ধরনের পড়ার অনুরোধ
write যেকোন ধরনের লেখার অনুরোধ
স্ট্যান্ডার্ড পদ্ধতি
get একক নথি বা ফাইলের জন্য অনুরোধ পড়ুন
list প্রশ্ন এবং সংগ্রহের জন্য অনুরোধ পড়ুন
create নতুন নথি বা ফাইল লিখুন
update বিদ্যমান ডাটাবেস নথিতে লিখুন বা ফাইল মেটাডেটা আপডেট করুন
delete ডেটা মুছুন

আপনি ওভারল্যাপ একই পদ্ধতি পড়তে পারে না match একই ব্লক বা লেখার পদ্ধতি পরস্পরবিরোধী path ঘোষণা।

উদাহরণস্বরূপ, নিম্নলিখিত নিয়মগুলি ব্যর্থ হবে:

service bad.example {
  match /rules/with/overlapping/methods {
    // This rule allows reads to all authenticated users
    allow read: if request.auth != null;

    match another/subpath {
      // This secondary, more specific read rule causes an error
      allow get: if request.auth != null && request.auth.uid == "me";
      // Overlapping write methods in the same path cause an error as well
      allow write: if request.auth != null;
      allow create: if request.auth != null && request.auth.uid == "me";
    }
  }
}

ফাংশন

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

  • কার্যাবলী শুধুমাত্র একটি একক ধারণ করতে পারে return বিবৃতি। তারা কোন অতিরিক্ত যুক্তি ধারণ করতে পারে না। উদাহরণস্বরূপ, তারা লুপ চালাতে পারে না বা বাহ্যিক পরিষেবাগুলিতে কল করতে পারে না।
  • ফাংশনগুলি স্বয়ংক্রিয়ভাবে ফাংশন এবং ভেরিয়েবলগুলিকে যে সুযোগে সংজ্ঞায়িত করা হয়েছে সেখান থেকে অ্যাক্সেস করতে পারে। উদাহরণস্বরূপ, একটি ফাংশন মধ্যে সংজ্ঞায়িত service cloud.firestore সুযোগ অ্যাক্সেস আছে resource এবং বিল্ট-ইন ফাংশন যেমন পরিবর্তনশীল get() এবং exists()
  • ফাংশন অন্যান্য ফাংশন কল করতে পারে কিন্তু recurse নাও হতে পারে। মোট কল স্ট্যাক গভীরতা 20 সীমাবদ্ধ।
  • নিয়ম সংস্করণে v2 , ফাংশন ব্যবহার করে ভেরিয়েবল নির্ধারণ করতে পারবেন let শব্দ। ফাংশনে 10 টি পর্যন্ত বাইন্ডিং থাকতে পারে, কিন্তু একটি রিটার্ন স্টেটমেন্ট দিয়ে শেষ করতে হবে।

একটি ফাংশন সংজ্ঞায়িত করা হয় function শব্দ এবং শূন্য বা তার বেশি আর্গুমেন্ট লাগে। উদাহরণস্বরূপ, আপনি উপরের উদাহরণগুলিতে ব্যবহৃত দুটি ধরণের শর্তকে একক ফাংশনে একত্রিত করতে চাইতে পারেন:

service cloud.firestore {
  match /databases/{database}/documents {
    // 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 /cities/{city} {
      allow read, write: if signedInOrPublic();
    }

    match /users/{user} {
      allow read, write: if signedInOrPublic();
    }
  }
}

এখানে একটি উদাহরণ ফাংশন আর্গুমেন্ট দেখানো এবং কাজ দেওয়া যাক। অ্যাসাইনমেন্ট স্টেটমেন্টগুলিকে সেমি-কোলন দ্বারা আলাদা করা উচিত।

function isAuthorOrAdmin(userId, article) {
  let isAuthor = article.author == userId;
  let isAdmin = exists(/databases/$(database)/documents/admins/$(userId));
  return isAuthor || isAdmin;
}

উল্লেখ্য কিভাবে isAdmin নিয়োগ প্রশাসক সংগ্রহে একটি লুকআপ enforces। অপ্রয়োজনীয় লুক-ছাড়াই অলস মূল্যায়ন স্বরূপ, এর শর্ট-সার্কিট প্রকৃতি সদ্ব্যবহার && (এবং) এবং || (বা) তুলনা একটি দ্বিতীয় ফাংশন শুধুমাত্র যদি কল isAuthor সত্য হতে পারে (জন্য প্রদর্শিত হয় && তুলনা) অথবা মিথ্যা (জন্য || তুলনা)।

function isAdmin(userId) {
  return exists(/databases/$(database)/documents/admins/$(userId));
}
function isAuthorOrAdmin(userId, article) {
  let isAuthor = article.author == userId;
  // `||` is short-circuiting; isAdmin called only if isAuthor == false.
  return isAuthor || isAdmin(userId);
}

আপনার নিরাপত্তা বিধিমালায় ফাংশন ব্যবহার করলে সেগুলি আরও রক্ষণাবেক্ষণযোগ্য হয় কারণ আপনার নিয়মগুলির জটিলতা বৃদ্ধি পায়।

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

উপরে উল্লিখিত হিসাবে, রিয়েলটাইম ডাটাবেস বিধিমালায় তিনটি মৌলিক উপাদান রয়েছে: ডাটাবেসের অবস্থান JSON কাঠামোর আয়না হিসাবে, অনুরোধের ধরন এবং অ্যাক্সেস প্রদানের শর্ত।

ডাটাবেসের অবস্থান

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

  {
    "messages": {
      "message0": {
        "content": "Hello",
        "timestamp": 1405704370369
      },
      "message1": {
        "content": "Goodbye",
        "timestamp": 1405704395231
      },
      ...
    }
  }

আপনার নিয়মগুলি সেই কাঠামোর প্রতিফলন করা উচিত। উদাহরণ স্বরূপ:

  {
    "rules": {
      "messages": {
        "$message": {
          // only messages from the last ten minutes can be read
          ".read": "data.child('timestamp').val() > (now - 600000)",

          // new messages must have a string content and a number timestamp
          ".validate": "newData.hasChildren(['content', 'timestamp']) &&
                        newData.child('content').isString() &&
                        newData.child('timestamp').isNumber()"
        }
      }
    }
  }

শো উপরে উদাহরণ হিসাবে, রিয়েলটাইম ডাটাবেস রুলস একটি সহায়তা $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 }
      }
    }
  }

পদ্ধতি

রিয়েলটাইম ডাটাবেসে, তিন ধরণের নিয়ম রয়েছে। এই নিয়ম ধরনের দুই - read এবং write - একটি ইনকামিং অনুরোধের পদ্ধতি প্রয়োগ করা হয়। validate নিয়ম টাইপ ডাটা স্ট্রাকচার enforces এবং বিন্যাস এবং ডাটা বিষয়বস্তু যাচাই করা হয়েছে। বিধি চালানো .validate যাচাই করার সময়ে যে পরে নিয়ম .write নিয়ম অ্যাক্সেস নিশ্চিত করে।

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

ডিফল্টরূপে, যদি এটির অনুমতি দেওয়ার নিয়ম না থাকে, তবে একটি পথ অ্যাক্সেস অস্বীকার করা হয়।

বিল্ডিং শর্তাবলী

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

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

request পরিবর্তনশীল

request পরিবর্তনশীল নিম্নলিখিত ক্ষেত্র এবং সংশ্লিষ্ট তথ্যে যা রয়েছে:

request.auth

একটি JSON ওয়েব টোকেন (JWT) যাতে Firebase প্রমাণীকরণ থেকে প্রমাণীকরণের শংসাপত্র রয়েছে। auth মান দাবী এবং আপনার Firebase প্রমাণীকরণ মাধ্যমে তৈরি কোনো কাস্টম দাবী একটি সেট রয়েছে টোকেন। সম্পর্কে আরও জানুন Firebase সিকিউরিটি নিয়ম এবং প্রমাণীকরণ

request.method

request.method মান পদ্ধতি বা একটি কাস্টম পদ্ধতির কোনো হতে পারে। সুবিধার পদ্ধতি read এবং write এছাড়াও বিধি জারি করে যে যথাক্রমে সব শুধুমাত্র-পঠনযোগ্য অথবা সমস্ত লেখ কেবল-মান পদ্ধতি প্রযোজ্য লেখা প্রক্রিয়া সহজ করার জন্য বিদ্যমান।

request.params

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

request.path

request.path লক্ষ্য জন্য পথ resource । পথটি পরিষেবা সম্পর্কিত। যেমন অ URL নিরাপদ অক্ষর ধারণকারী পথ অংশ / URL- এনকোড হয়।

resource পরিবর্তনশীল

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

অপারেটর এবং অপারেটরের অগ্রাধিকার

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

অবাধ এক্সপ্রেশন দেওয়া a এবং b , একটি ক্ষেত্র f , এবং একটি সূচক i

অপারেটর বর্ণনা সহযোগিতা
a[i] a() af সূচক, কল, ক্ষেত্র অ্যাক্সেস বাম থেকে ডান
!a -a একক অস্বীকার ডান থেকে বাম
a/ba%ba*b গুণক অপারেটর বাম থেকে ডান
a+b ab অ্যাডিটিভ অপারেটর বাম থেকে ডান
a>ba>=ba রিলেশনাল অপারেটর বাম থেকে ডান
a in b তালিকা বা মানচিত্রে অস্তিত্ব বাম থেকে ডান
a is type প্রকার তুলনা, যেখানে type bool,, int- ভাসা, সংখ্যা, স্ট্রিং, তালিকা, মানচিত্র, টাইমস্ট্যাম্প, সময়কাল, পাথ অথবা হতে পারে অক্ষাংশ দ্রাঘিমাংশ বাম থেকে ডান
a==ba!=b তুলনা অপারেটর বাম থেকে ডান
a && b শর্তাধীন এবং বাম থেকে ডান
a || b শর্তাধীন বা বাম থেকে ডান
a ? true_value : false_value ত্রৈমাসিক অভিব্যক্তি বাম থেকে ডান

মেঘ স্টোরেজ

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

request পরিবর্তনশীল

request পরিবর্তনশীল নিম্নলিখিত ক্ষেত্র এবং সংশ্লিষ্ট তথ্যে যা রয়েছে:

request.auth

একটি JSON ওয়েব টোকেন (JWT) যাতে Firebase প্রমাণীকরণ থেকে প্রমাণীকরণের শংসাপত্র রয়েছে। auth মান দাবী এবং আপনার Firebase প্রমাণীকরণ মাধ্যমে তৈরি কোনো কাস্টম দাবী একটি সেট রয়েছে টোকেন। সম্পর্কে আরও জানুন Firebase সিকিউরিটি নিয়ম এবং প্রমাণীকরণ

request.method

request.method মান পদ্ধতি বা একটি কাস্টম পদ্ধতির কোনো হতে পারে। সুবিধার পদ্ধতি read এবং write এছাড়াও বিধি জারি করে যে যথাক্রমে সব শুধুমাত্র-পঠনযোগ্য অথবা সমস্ত লেখ কেবল-মান পদ্ধতি প্রযোজ্য লেখা প্রক্রিয়া সহজ করার জন্য বিদ্যমান।

request.params

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

request.path

request.path লক্ষ্য জন্য পথ resource । পথটি পরিষেবা সম্পর্কিত। যেমন অ URL নিরাপদ অক্ষর ধারণকারী পথ অংশ / URL- এনকোড হয়।

resource পরিবর্তনশীল

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

অপারেটর এবং অপারেটরের অগ্রাধিকার

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

অবাধ এক্সপ্রেশন দেওয়া a এবং b , একটি ক্ষেত্র f , এবং একটি সূচক i

অপারেটর বর্ণনা সহযোগিতা
a[i] a() af সূচক, কল, ক্ষেত্র অ্যাক্সেস বাম থেকে ডান
!a -a একক অস্বীকার ডান থেকে বাম
a/ba%ba*b গুণক অপারেটর বাম থেকে ডান
a+b ab অ্যাডিটিভ অপারেটর বাম থেকে ডান
a>ba>=ba রিলেশনাল অপারেটর বাম থেকে ডান
a in b তালিকা বা মানচিত্রে অস্তিত্ব বাম থেকে ডান
a is type প্রকার তুলনা, যেখানে type bool,, int- ভাসা, সংখ্যা, স্ট্রিং, তালিকা, মানচিত্র, টাইমস্ট্যাম্প, সময়কাল, পাথ অথবা হতে পারে অক্ষাংশ দ্রাঘিমাংশ বাম থেকে ডান
a==ba!=b তুলনা অপারেটর বাম থেকে ডান
a && b শর্তাধীন এবং বাম থেকে ডান
a || b শর্তাধীন বা বাম থেকে ডান
a ? true_value : false_value ত্রৈমাসিক অভিব্যক্তি বাম থেকে ডান

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

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

পূর্বনির্ধারিত ভেরিয়েবল

একটি সহায়ক, পূর্বনির্ধারিত ভেরিয়েবল আছে যা একটি নিয়ম সংজ্ঞা ভিতরে অ্যাক্সেস করা যেতে পারে। এখানে প্রতিটি সংক্ষিপ্ত সারসংক্ষেপ:

পূর্বনির্ধারিত ভেরিয়েবল
এখন লিনাক্স যুগের পর থেকে মিলিসেকেন্ডে বর্তমান সময়। এটি SDK এর firebase.database.ServerValue.TIMESTAMP- এর সাথে তৈরি টাইমস্ট্যাম্পগুলি যাচাই করার জন্য বিশেষভাবে ভাল কাজ করে।
মূল একজন RuleDataSnapshot Firebase ডাটাবেসের মধ্যে রুট পাথ প্রতিনিধিত্বমূলক যেমন চেষ্টা অপারেশন সামনে বিদ্যমান।
নতুন ডেটা একজন RuleDataSnapshot যেমন চেষ্টা অপারেশনের পর উপস্থিত হবে ডেটা উপস্থাপন করে। এতে লেখা নতুন তথ্য এবং বিদ্যমান ডেটা অন্তর্ভুক্ত রয়েছে।
তথ্য একজন RuleDataSnapshot যেমন প্রয়াস করা ক্রিয়াকলাপের অনেক আগে থেকেই আছেন ডেটা উপস্থাপন করে।
$ ভেরিয়েবল একটি ওয়াইল্ডকার্ড পাথ আইডি এবং গতিশীল শিশু কীগুলি উপস্থাপন করতে ব্যবহৃত হয়।
লেখক একটি অনুমোদিত ব্যবহারকারীর টোকেন পেলোডের প্রতিনিধিত্ব করে।

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

{
  "rules": {
    "foo": {
      // /foo is readable by the world
      ".read": true,

      // /foo is writable by the world
      ".write": true,

      // data written to /foo must be a string less than 100 characters
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

ডেটা ভিত্তিক নিয়ম

আপনার ডাটাবেসের যেকোন ডেটা আপনার নিয়মে ব্যবহার করা যেতে পারে। পূর্বনির্ধারিত ভেরিয়েবল ব্যবহার root , data , এবং newData , আপনি যে কোনো পথ যেমন আগে বা একটি লেখার ঘটনার পরে উপস্থিত হবে অ্যাক্সেস করতে পারেন।

এই উদাহরণে, যা যতদিন লেখার অপারেশন পারবেন বিবেচনা মান হিসাবে /allow_writes/ নোড true , পিতা বা মাতা নোডের একটি নেই readOnly পতাকা সেট, এবং সেখানে একটি শিশু নামে হয় foo সদ্য লিখিত তথ্য:

".write": "root.child('allow_writes').val() === true &&
          !data.parent().child('readOnly').exists() &&
          newData.child('foo').exists()"

প্রশ্ন ভিত্তিক নিয়ম

যদিও আপনি ফিল্টার হিসাবে নিয়ম ব্যবহার করতে পারবেন না, আপনি আপনার নিয়মের মধ্যে ক্যোয়ারী প্যারামিটার ব্যবহার করে ডেটা উপসেটগুলিতে অ্যাক্সেস সীমিত করতে পারেন। ব্যবহারের query. ক্যোয়ারী প্যারামিটারের উপর ভিত্তি করে পড়া বা লেখার অ্যাক্সেস দেওয়ার জন্য আপনার নিয়মের অভিব্যক্তি।

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

"baskets": {
  ".read": "auth.uid != null &&
            query.orderByChild == 'owner' &&
            query.equalTo == auth.uid" // restrict basket access to owner of basket
}

নীচের প্রশ্ন, যা নিয়মের মধ্যে ক্যোয়ারী প্যারামিটার অন্তর্ভুক্ত করে, সফল হবে:

db.ref("baskets").orderByChild("owner")
                 .equalTo(auth.currentUser.uid)
                 .on("value", cb)                 // Would succeed

যাইহোক, প্রশ্ন যা নিয়ম পরামিতি অন্তর্ভুক্ত করবেন না একটি সঙ্গে ব্যর্থ হবে PermissionDenied ত্রুটি:

db.ref("baskets").on("value", cb)                 // Would fail with PermissionDenied

আপনি ক্লায়েন্ট রিড অপারেশনের মাধ্যমে কতটা ডাটা ডাউনলোড করেন তা সীমাবদ্ধ করতে আপনি প্রশ্ন-ভিত্তিক নিয়মগুলিও ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, নিম্নোক্ত নিয়মটি একটি ক্যোয়ারীর শুধুমাত্র প্রথম 1000 ফলাফলের অ্যাক্সেসকে সীমাবদ্ধ করে, যেমনটি অগ্রাধিকার অনুসারে আদেশ করা হয়েছে:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example queries:

db.ref("messages").on("value", cb)                // Would fail with PermissionDenied

db.ref("messages").limitToFirst(1000)
                  .on("value", cb)                // Would succeed (default order by key)

নিম্নলিখিত query. রিয়েলটাইম ডাটাবেস নিয়মে এক্সপ্রেশন পাওয়া যায়।

প্রশ্ন-ভিত্তিক নিয়ম এক্সপ্রেশন
অভিব্যক্তি প্রকার বর্ণনা
query.orderByKey
query.orderByPriority
query.orderByValue
বুলিয়ান কী, অগ্রাধিকার বা মান দ্বারা আদেশ করা প্রশ্নের জন্য সত্য। অন্যথায় মিথ্যা।
query.orderByChild স্ট্রিং
খালি
একটি শিশু নোডের আপেক্ষিক পথকে উপস্থাপন করতে একটি স্ট্রিং ব্যবহার করুন। উদাহরণস্বরূপ, query.orderByChild == "address/zip" । যদি প্রশ্নটি একটি শিশু নোড দ্বারা অর্ডার করা না হয়, এই মানটি শূন্য।
query.startAt
query.endAt
query.equalTo
স্ট্রিং
সংখ্যা
বুলিয়ান
খালি
এক্সিকিউটিং ক্যোয়ারীর সীমানা পুনরুদ্ধার করে, অথবা যদি কোন আবদ্ধ সেট না থাকে তবে শূন্য ফেরত দেয়।
query.limitToFirst
query.limitToLast
সংখ্যা
খালি
এক্সিকিউটিং ক্যোয়ারীর সীমা পুনরুদ্ধার করে, অথবা কোন সীমা সেট না থাকলে শূন্য ফেরত দেয়।

অপারেটর

রিয়েলটাইম ডাটাবেস রুলস একটি নম্বর সমর্থন অপারেটার আপনি শর্ত বিবৃতিতে ভেরিয়েবল একত্রিত করতে ব্যবহার করতে পারেন। সম্পূর্ণ তালিকা দেখুন রেফারেন্স ডকুমেন্টেশনে অপারেটার

শর্ত তৈরি করা

আপনি যে অ্যাক্সেস দিতে চান তার উপর ভিত্তি করে আপনার প্রকৃত অবস্থার তারতম্য হবে। নিয়মগুলি ইচ্ছাকৃতভাবে নমনীয়তার একটি বিশাল ডিগ্রী প্রদান করে, তাই আপনার অ্যাপের নিয়মগুলি শেষ পর্যন্ত আপনার যতটা সহজ বা জটিল হতে পারে।

কিছু দিক নির্দেশনা তৈরি সহজ জন্য, উৎপাদন-প্রস্তুত রুলস দেখতে বেসিক সিকিউরিটি রুলস