Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

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

ফায়ারবেস সুরক্ষা বিধিগুলি নমনীয়, শক্তিশালী, কাস্টম ভাষাগুলি লাভ করে যা বিস্তৃত জটিলতা এবং গ্রানুলারিটির সমর্থন করে। আপনি আপনার বিধিগুলি নির্দিষ্ট হিসাবে বা আপনার অ্যাপ্লিকেশনটির জন্য সাধারণ হিসাবে সাধারণ হিসাবে তৈরি করতে পারেন। রিয়েলটাইম ডেটাবেস নিয়মগুলি একটি সিনট্যাক্স ব্যবহার করে যা JSON স্ট্রাকচারে জাভাস্ক্রিপ্টের মতো দেখাচ্ছে। ক্লাউড ফায়ার স্টোর এবং ক্লাউড স্টোরেজ নিয়মগুলি কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (সিইএল) এর উপর ভিত্তি করে একটি ভাষা ব্যবহার করে, যা সিইএলে match তৈরি করে এবং শর্তাধীন অ্যাক্সেসকে সমর্থন করে এমন বিবৃতিগুলিকে 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 সুবিধার পদ্ধতিগুলি নির্দিষ্ট ডাটাবেস বা স্টোরেজ পাথের উপর বিস্তৃত পঠন এবং লেখার অ্যাক্সেসকে সক্ষম করে।
  • পথ: ইউআরআই পথ হিসাবে উপস্থাপন করা ডাটাবেস বা সঞ্চয় স্থান location
  • বিধি: 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 সুবিধার পদ্ধতিগুলি নির্দিষ্ট ডাটাবেস বা স্টোরেজ পাথের উপর বিস্তৃত পঠন এবং লেখার অ্যাক্সেসকে সক্ষম করে।
  • পথ: ইউআরআই পথ হিসাবে উপস্থাপন করা ডাটাবেস বা সঞ্চয় স্থান location
  • বিধি: allow স্টেটমেন্টটিতে একটি শর্ত রয়েছে যা যদি কোনও অনুরোধের সত্যতার সাথে মূল্যায়ন করে তবে এটি অনুমতি দেয়।

এই প্রতিটি ধারণার নীচে আরও বিশদে বর্ণনা করা হয়েছে।

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

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

তারা নিম্নলিখিত বাক্য গঠন ব্যবহার করে:

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

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

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

বিধি তৈরি করে

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

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

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

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

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

syntax স্টেটমেন্টটি সূত্রটি লেখার জন্য ব্যবহৃত ফায়ারবেস বিধি ভাষার সংস্করণ নির্দেশ করে। ভাষার সর্বশেষ সংস্করণটি v2

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

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

সেবা

service ঘোষণায় কোন ফায়ারবেস পণ্য বা পরিষেবা আপনার বিধি প্রযোজ্য তা সংজ্ঞায়িত করে। আপনি উত্স ফাইল প্রতি শুধুমাত্র একটি 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
}
 

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

ম্যাচ

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

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

কোনও path প্যাটার্নের সাথে ম্যাচগুলি আংশিক বা সম্পূর্ণ হতে পারে:

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

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

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

 // 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} in এ একটি ভেরিয়েবল মোড়ানো দ্বারা একটি পথে ঘোষণা করা হয় {variable} এই পরিবর্তনশীলটি string হিসাবে match বিবৃতিতে অ্যাক্সেসযোগ্য।
  • রিকার্সিভ ওয়াইল্ডকার্ড: রিকার্সিভ বা মাল্টি-সেগমেন্ট, ওয়াইল্ডকার্ড কোনও পাথ বা এর নীচে একাধিক পাথ বিভাগের সাথে মেলে। এই ওয়াইল্ডকার্ডটি আপনি যে অবস্থানটিতে সেট করেছেন তার নীচে সমস্ত পাথের সাথে মেলে। আপনি আপনার সেগমেন্ট ভেরিয়েবলের শেষে =** স্ট্রিং যুক্ত করে এটি ঘোষণা করতে পারেন: {variable=**} এই পরিবর্তনশীল মধ্যে প্রবেশযোগ্য match হিসেবে বিবৃতি path অবজেক্ট।

অনুমতি দিন

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

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

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

 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 ডেটা মুছুন

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

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

 service bad.example {
  match /rules/with/overlapping/methods {
    // This rule allows reads to all unauthenticated 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 মধ্যে সংজ্ঞায়িত একটি service cloud.firestore resource ভেরিয়েবল এবং অন্তর্নির্মিত ফাংশনগুলিতে অ্যাক্সেস রয়েছে যেমন get() এবং exists()
  • ফাংশনগুলি অন্যান্য ফাংশনগুলিতে কল করতে পারে তবে পুনরাবৃত্তি হতে পারে না। মোট কল স্ট্যাকের গভীরতা 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 অ্যাসাইনমেন্ট কীভাবে অ্যাডমিন সংগ্রহের একটি isAdmin তা নোট করুন। অবিহীন অনুসন্ধানের প্রয়োজন ছাড়াই অলস মূল্যায়নের জন্য, && (AND) এবং এর স্বল্প-প্রদত্ত প্রকৃতির সুযোগ নিন || (ওআর) কেবলমাত্র দ্বিতীয়টি ফাংশন কল করার তুলনা যদি 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 ঘোষণা: বিধি প্রয়োগ করার জন্য ফায়ারবেস পণ্য ঘোষণা করে।
  • match ব্লক: নিয়মাবলী প্রয়োগ করা ডাটাবেস বা স্টোরেজ বালতিতে একটি পথ নির্ধারণ করে।
  • allow বিবৃতি: অ্যাক্সেস allow দেওয়ার শর্তাদি সরবরাহ করে, পদ্ধতিগুলির দ্বারা পৃথক। সমর্থিত পদ্ধতিগুলির মধ্যে রয়েছে: get , list create , create , update , delete এবং সুবিধা পদ্ধতিগুলি read এবং write
  • function চ্ছিক function ঘোষণা: একাধিক নিয়ম জুড়ে ব্যবহারের জন্য শর্তগুলি একত্রিত করার এবং মোড়ানোর ক্ষমতা সরবরাহ করুন।

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

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

syntax স্টেটমেন্টটি সূত্রটি লেখার জন্য ব্যবহৃত ফায়ারবেস বিধি ভাষার সংস্করণ নির্দেশ করে। ভাষার সর্বশেষ সংস্করণটি v2

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

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

সেবা

service ঘোষণায় কোন ফায়ারবেস পণ্য বা পরিষেবা আপনার বিধি প্রযোজ্য তা সংজ্ঞায়িত করে। আপনি উত্স ফাইল প্রতি শুধুমাত্র একটি 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
}
 

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

ম্যাচ

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

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

কোনও path প্যাটার্নের সাথে ম্যাচগুলি আংশিক বা সম্পূর্ণ হতে পারে:

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

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

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

 // 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} in এ একটি ভেরিয়েবল মোড়ানো দ্বারা একটি পথে ঘোষণা করা হয় {variable} এই পরিবর্তনশীলটি string হিসাবে match বিবৃতিতে অ্যাক্সেসযোগ্য।
  • রিকার্সিভ ওয়াইল্ডকার্ড: রিকার্সিভ বা মাল্টি-সেগমেন্ট, ওয়াইল্ডকার্ড কোনও পাথ বা এর নীচে একাধিক পাথ বিভাগের সাথে মেলে। এই ওয়াইল্ডকার্ডটি আপনি যে অবস্থানটিতে সেট করেছেন তার নীচে সমস্ত পাথের সাথে মেলে। আপনি আপনার সেগমেন্ট ভেরিয়েবলের শেষে =** স্ট্রিং যুক্ত করে এটি ঘোষণা করতে পারেন: {variable=**} এই পরিবর্তনশীল মধ্যে প্রবেশযোগ্য match হিসেবে বিবৃতি path অবজেক্ট।

অনুমতি দিন

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

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

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

 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 ডেটা মুছুন

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

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

 service bad.example {
  match /rules/with/overlapping/methods {
    // This rule allows reads to all unauthenticated 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 মধ্যে সংজ্ঞায়িত একটি service cloud.firestore resource ভেরিয়েবল এবং অন্তর্নির্মিত ফাংশনগুলিতে অ্যাক্সেস রয়েছে যেমন get() এবং exists()
  • ফাংশনগুলি অন্যান্য ফাংশনগুলিতে কল করতে পারে তবে পুনরাবৃত্তি হতে পারে না। মোট কল স্ট্যাকের গভীরতা 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 অ্যাসাইনমেন্ট কীভাবে অ্যাডমিন সংগ্রহের একটি isAdmin তা নোট করুন। অবিহীন অনুসন্ধানের প্রয়োজন ছাড়াই অলস মূল্যায়নের জন্য, && (AND) এবং এর স্বল্প-প্রদত্ত প্রকৃতির সুযোগ নিন || (ওআর) কেবলমাত্র দ্বিতীয়টি ফাংশন কল করার তুলনা যদি 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);
}
 

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

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

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

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

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

   {
    "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 রুল টাইপ ডেটা স্ট্রাকচার প্রয়োগ করে এবং ডেটা ফর্ম্যাট এবং বিষয়বস্তু বৈধ। বিধি চালানো .validate যাচাই করার সময়ে যে পরে নিয়ম .write নিয়ম অ্যাক্সেস নিশ্চিত করে।

বিধি প্রকার
.read ব্যবহারকারীরা ডেটা পড়ার অনুমতি দিলে এবং কখন তা বর্ণনা করে।
.write ডেটা লেখার অনুমতি থাকলে এবং কখন তা বর্ণনা করে।
.validate সঠিকরূপে ফর্ম্যাট করা মানটি কেমন হবে তা নির্ধারণ করে, এতে শিশু বৈশিষ্ট্য এবং ডেটা টাইপ রয়েছে কিনা।

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

বিল্ডিংয়ের অবস্থা

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

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

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

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

request.auth

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

request.method

request.method কোনও মানক পদ্ধতি বা কাস্টম পদ্ধতি হতে পারে। readwrite সুবিধাপ্রাপ্ত পদ্ধতিগুলি রাইটিং বিধিগুলি সহজ করার জন্য বিদ্যমান যা যথাক্রমে সমস্ত পঠনযোগ্য বা সমস্ত লেখার জন্য কেবল মানক পদ্ধতিতে প্রযোজ্য।

request.params

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

request.path

request.path হ'ল লক্ষ্য resource পথ। পথটি সেবার সাথে সম্পর্কিত। Url- র নিরাপদ অক্ষরগুলি / যেমন url- এনকোডযুক্ত পাথ বিভাগগুলি।

resource ভেরিয়েবল

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

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

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

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

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

মেঘ স্টোরেজ

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

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

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

request.auth

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

request.method

request.method কোনও মানক পদ্ধতি বা কাস্টম পদ্ধতি হতে পারে। readwrite সুবিধাপ্রাপ্ত পদ্ধতিগুলি রাইটিং বিধিগুলি সহজ করার জন্য বিদ্যমান যা যথাক্রমে সমস্ত পঠনযোগ্য বা সমস্ত লেখার জন্য কেবল মানক পদ্ধতিতে প্রযোজ্য।

request.params

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

request.path

request.path হ'ল লক্ষ্য resource পথ। পথটি সেবার সাথে সম্পর্কিত। Url- র নিরাপদ অক্ষরগুলি / যেমন url- এনকোডযুক্ত পাথ বিভাগগুলি।

resource ভেরিয়েবল

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

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

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

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

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

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

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

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

বেশ কয়েকটি সহায়ক, প্রাক-সংজ্ঞায়িত ভেরিয়েবল রয়েছে যা নিয়ম সংজ্ঞায়নের ভিতরে প্রবেশ করা যেতে পারে। এখানে প্রত্যেকটির একটি সংক্ষিপ্তসার দেওয়া হল:

পূর্বনির্ধারিত পরিবর্তনশীল
এখন লিনাক্স যুগের পর থেকে মিলিসেকেন্ডে বর্তমান সময়। এটি এসডিকে ফায়ারবেস.ড্যাটাবেস.সার্ভারভ্যালিউ.টাইমস্ট্যাম্প দিয়ে তৈরি টাইমস্ট্যাম্পগুলি যাচাই করার জন্য বিশেষত ভাল কাজ করে।
মূল ফায়ারবেস ডাটাবেসে রুট পাথকে উপস্থাপন করে এমন একটি রুলডাটাস্নাপশট যেমন চেষ্টা করার আগে এটি উপস্থিত রয়েছে।
newData একটি 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 data ব্যবহার করে আপনি কোনও লেখার ইভেন্টের আগে বা পরে যেমন উপস্থিত থাকতে পারে তেমন কোনও পাথ অ্যাক্সেস করতে পারবেন।

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

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

অনুসন্ধান-ভিত্তিক নিয়ম

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

উদাহরণস্বরূপ, নিম্নলিখিত ক্যোয়ারী-ভিত্তিক নিয়মটি সক্রিয় ব্যবহারকারীর মালিকানাধীন কেবলমাত্র baskets মধ্যে 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
সংখ্যা
খালি
এক্সিকিউটিভ ক্যোয়ারির সীমাটি পুনরুদ্ধার করে, বা কোনও সীমা সেট না থাকলে শূন্য দেয়

অপারেটর

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

শর্ত তৈরি করা হচ্ছে

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

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