ক্লাউড স্টোরেজের জন্য ফায়ারবেস সুরক্ষা নিয়মগুলি ক্লাউড স্টোরেজে সঞ্চিত ফাইলগুলিতে কে পড়ার এবং লেখার অ্যাক্সেস পেয়েছে, সেইসাথে ফাইলগুলি কীভাবে গঠন করা হয় এবং সেগুলিতে কী মেটাডেটা রয়েছে তা নির্ধারণ করতে ব্যবহৃত হয়। ক্লাউড স্টোরেজ সিকিউরিটি বিধিগুলি এমন নিয়মগুলির সমন্বয়ে গঠিত যেগুলি একটি কাঙ্খিত ক্রিয়াকলাপের অনুমতি বা অস্বীকার করার request
এবং resource
বিবেচনা করে, যেমন একটি ফাইল আপলোড করা বা ফাইল মেটাডেটা পুনরুদ্ধার করা৷ এই রেফারেন্স ডক্সগুলি নিয়মের প্রকার, একটি request
বৈশিষ্ট্য এবং একটি resource
, ক্লাউড স্টোরেজ সুরক্ষা নিয়ম দ্বারা ব্যবহৃত ডেটা প্রকারগুলি এবং কীভাবে ত্রুটিগুলি ঘটে তা কভার করে৷
নিয়ম
একটি rule
একটি অভিব্যক্তি যা একটি request
একটি পছন্দসই কর্ম সম্পাদন করার অনুমতি দেওয়া হয় কিনা তা নির্ধারণ করতে মূল্যায়ন করা হয়।
প্রকারভেদ
অনুমতি দিন
allow
বিধিতে একটি পদ্ধতি থাকে, যেমন read
বা write
, সেইসাথে একটি ঐচ্ছিক শর্ত। যখন একটি নিয়ম কার্যকর করা হয়, শর্তটি মূল্যায়ন করা হয়, এবং যদি শর্তটি true
মূল্যায়ন করা হয়, তবে পছন্দসই পদ্ধতি অনুমোদিত হয়; অন্যথায়, পদ্ধতি অস্বীকার করা হয়. কোন শর্ত ছাড়া একটি allow
নিয়ম সবসময় পছন্দসই পদ্ধতির অনুমতি দেয়।
// Always allow method allow <method>; // Allow method if condition is true allow <method>: if <condition>;
বর্তমানে, allow
শুধুমাত্র সমর্থিত ধরনের নিয়ম।
অনুরোধ পদ্ধতি
পড়ুন
read
পদ্ধতিটি ফাইল ডাউনলোড এবং ফাইল মেটাডেটা রিড সহ ফাইল ডেটা বা মেটাডেটা পড়ার সমস্ত অনুরোধগুলিকে কভার করে৷
// Always allow reads allow read; // Allow reads if condition evaluates to true allow read: if <condition>;
লিখুন
write
পদ্ধতিটি ফাইল আপলোড, ফাইল মুছে ফেলা এবং ফাইল মেটাডেটা আপডেট সহ ফাইল ডেটা বা মেটাডেটা লেখা হয় এমন সমস্ত অনুরোধকে কভার করে।
// Always allow writes allow write; // Allow writes if condition evaluates to true allow write: if <condition>;
ম্যাচ
নিয়মগুলি কার্যকর করা হয় যখন একটি ব্যবহারকারীর request
(যেমন একটি ফাইল আপলোড বা ডাউনলোড) একটি নিয়ম দ্বারা আচ্ছাদিত একটি ফাইল পাথের সাথে মেলে। একটি match
একটি পাথ এবং একটি বডি নিয়ে গঠিত, যাতে অন্তত একটি allow
নিয়ম থাকতে হবে। যদি কোন পথ মেলে না, অনুরোধ প্রত্যাখ্যান করা হয়।
আপনি একটি সম্পূর্ণ নামের পাথের match
পারেন, অথবা আপনি একটি নির্দিষ্ট প্যাটার্নের সাথে মানানসই সমস্ত পাথ মেলে ওয়াইল্ডকার্ড সন্নিবেশ করতে পারেন৷
পাথ সেগমেন্ট
single_segment
ক্লাউড স্টোরেজে সঞ্চিত একটি ফাইলের সাথে মেলে এমন একটি নিয়ম তৈরি করতে আপনি একক পাথ সেগমেন্ট ব্যবহার করতে পারেন।
// Allow read at "path" if condition evaluates to true match /path { allow read: if <condition>; }
একাধিক পাথ সেগমেন্ট এবং নেস্টেড পাথও অনুমোদিত:
// Allow read at "path/to/object" if condition evaluates to true match /path { match /to { match /object { allow read: if <condition>; } } }
{single_segment_wildcard}
আপনি যদি একই পাথে একাধিক ফাইলে একটি নিয়ম প্রয়োগ করতে চান, আপনি একটি নির্দিষ্ট পাথে সমস্ত ফাইলের সাথে মেলে একটি ওয়াইল্ডকার্ড পাথ সেগমেন্ট ব্যবহার করতে পারেন। একটি ওয়াইল্ডকার্ড ভেরিয়েবলকে একটি পাথে ঘোষণা করা হয় একটি ভেরিয়েবলকে কোঁকড়া বন্ধনীতে মোড়ানো: {variable}
। এই ভেরিয়েবলটি একটি string
হিসাবে ম্যাচ স্টেটমেন্টের মধ্যে অ্যাক্সেসযোগ্য।
// Allow read at any path "/*", if condition evaluates to true match /{single_path} { // Matches "path", "to", or "object" but not "path/to/object" allow read: if <condition>; }
একাধিক পাথ সেগমেন্ট এবং নেস্টেড পাথগুলিতেও ওয়াইল্ডকার্ড থাকতে পারে:
// Allow read at any path "/path/*/newPath/*", if condition evaluates to true match /path/{first_wildcard} { match /newPath/{second_wildcard} { // Matches "path/to/newPath/newObject" or "path/from/newPath/oldObject" allow read: if <condition>; } }
{multi_segment_wildcard=**}
আপনি যদি একটি পাথের বা নীচের যেকোন সংখ্যক পাথ সেগমেন্টের সাথে মেলাতে চান, আপনি একটি মাল্টি সেগমেন্ট ওয়াইল্ডকার্ড ব্যবহার করতে পারেন, যা অবস্থানের সাথে এবং নীচের সমস্ত অনুরোধের সাথে মেলে। এটি একজন ব্যবহারকারীকে তাদের নিজস্ব বিনামূল্যের ফর্ম স্টোরেজ স্পেস প্রদানের জন্য, বা বিভিন্ন পাথ সেগমেন্টের সাথে মেলে এমন নিয়ম তৈরি করার জন্য কার্যকর হতে পারে (যেমন ফাইলগুলির একটি সর্বজনীনভাবে পাঠযোগ্য সেট তৈরি করা, বা সমস্ত লেখার জন্য প্রমাণীকরণের প্রয়োজন)।
একটি মাল্টি সেগমেন্ট ওয়াইল্ডকার্ড পাথ একটি একক সেগমেন্ট ওয়াইল্ডকার্ডের মতোই ঘোষণা করা হয়, ভেরিয়েবলের শেষে =**
যোগ করে: {variable=**}
। একটি মাল্টি-সেগমেন্ট ওয়াইল্ডকার্ড ভেরিয়েবল একটি path
অবজেক্ট হিসাবে ম্যাচ স্টেটমেন্টের মধ্যে উপলব্ধ।
// Allow read at any path "/**", if condition evaluates to true match /{multi_path=**} { // Matches anything at or below this, from "path", "path/to", "path/to/object", ... allow read: if <condition>; }
অনুরোধ
request
ভেরিয়েবল একটি শর্তের মধ্যে প্রদান করা হয় যে পাথে করা অনুরোধ প্রতিনিধিত্ব করা হয়. request
ভেরিয়েবলের বেশ কিছু প্রপার্টি আছে যা ইনকামিং রিকোয়েস্টের অনুমতি দিতে হবে কিনা তা স্থির করতে ব্যবহার করা যেতে পারে।
বৈশিষ্ট্য
auth
যখন একজন প্রমাণীকৃত ব্যবহারকারী ক্লাউড স্টোরেজের বিরুদ্ধে একটি অনুরোধ করেন, তখন auth
ভেরিয়েবলটি ব্যবহারকারীর uid
( request.auth.uid
) এর সাথে Firebase প্রমাণীকরণ JWT ( request.auth.token
) এর দাবির সাথে জমা হয়।
request.auth.token
নিম্নলিখিত কিছু বা সমস্ত কী রয়েছে:
মাঠ | বর্ণনা |
---|---|
email | অ্যাকাউন্টের সাথে যুক্ত ইমেল ঠিকানা, যদি উপস্থিত থাকে। |
email_verified | true যদি ব্যবহারকারী যাচাই করে থাকে যে তাদের email ঠিকানায় অ্যাক্সেস আছে। কিছু প্রদানকারী স্বয়ংক্রিয়ভাবে তাদের মালিকানাধীন ইমেল ঠিকানা যাচাই করে। |
phone_number | অ্যাকাউন্টের সাথে যুক্ত ফোন নম্বর, যদি উপস্থিত থাকে। |
name | ব্যবহারকারীর প্রদর্শনের নাম, যদি সেট করা থাকে। |
sub | ব্যবহারকারীর Firebase UID. এটি একটি প্রকল্পের মধ্যে অনন্য। |
firebase.identities | এই ব্যবহারকারীর অ্যাকাউন্টের সাথে যুক্ত সমস্ত পরিচয়ের অভিধান। অভিধানের কীগুলি নিম্নলিখিতগুলির মধ্যে যেকোনো একটি হতে পারে: email , phone , google.com , facebook.com , github.com , twitter.com । অভিধানের মান হল অ্যাকাউন্টের সাথে যুক্ত প্রতিটি পরিচয় প্রদানকারীর জন্য অনন্য শনাক্তকারীর অ্যারে। উদাহরণস্বরূপ, auth.token.firebase.identities["google.com"][0] এ অ্যাকাউন্টের সাথে যুক্ত প্রথম Google ব্যবহারকারী আইডি রয়েছে৷ |
firebase.sign_in_provider | সাইন-ইন প্রদানকারী এই টোকেনটি পেতে ব্যবহৃত নিম্নলিখিত স্ট্রিংগুলির মধ্যে একটি হতে পারে: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com ৷ |
firebase.tenant | অ্যাকাউন্টের সাথে সংশ্লিষ্ট ভাড়াটে আইডি, যদি উপস্থিত থাকে। যেমন tenant2-m6tyz |
কাস্টম প্রমাণীকরণ ব্যবহার করলে, request.auth.token
ডেভেলপারের দ্বারা নির্দিষ্ট করা কোনও কাস্টম দাবিও থাকে।
যখন একটি অননুমোদিত ব্যবহারকারী একটি অনুরোধ সঞ্চালন করে, request.auth
null
হয়।
// Allow requests from authenticated users allow read, write: if request.auth != null;
path
path
ভেরিয়েবলে সেই পাথ থাকে যার বিরুদ্ধে একটি request
করা হচ্ছে।
// Allow a request if the first path segment equals "images" allow read, write: if request.path[0] == 'images';
resource
resource
ভেরিয়েবলে আপলোড করা ফাইলের মেটাডেটা বা বিদ্যমান ফাইলের আপডেট করা মেটাডেটা থাকে। এটি resource
ভেরিয়েবলের সাথে সম্পর্কিত, যা নতুন মেটাডেটার বিপরীতে অনুরোধ করা পাথে বর্তমান ফাইল মেটাডেটা ধারণ করে।
// Allow a request if the new value is smaller than 5MB allow read, write: if request.resource.size < 5 * 1024 * 1024;
request.resource
resource
থেকে নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
সম্পত্তি |
---|
name |
bucket |
metadata |
size |
contentType |
time
time
ভেরিয়েবলটিতে একটি টাইমস্ট্যাম্প রয়েছে যা বর্তমান সার্ভারের সময়কে প্রতিনিধিত্ব করে যে সময়ে একটি অনুরোধ মূল্যায়ন করা হচ্ছে। আপনি ফাইলগুলিতে সময়-ভিত্তিক অ্যাক্সেস প্রদান করতে এটি ব্যবহার করতে পারেন, যেমন: শুধুমাত্র একটি নির্দিষ্ট তারিখ পর্যন্ত ফাইলগুলি আপলোড করার অনুমতি দেওয়া, বা ফাইলগুলি আপলোড হওয়ার এক ঘন্টা পর্যন্ত পড়ার অনুমতি দেওয়া৷
// Allow a read if the file was created less than one hour ago allow read: if request.time < resource.timeCreated + duration.value(1, 'h');
টাইমস্ট্যাম্প এবং সময়কাল ব্যবহার করে নিয়ম লিখতে অনেক ফাংশন প্রদান করা হয়।
সম্পদ
resource
ভেরিয়েবলে ক্লাউড স্টোরেজের ফাইলগুলির জন্য ফাইল মেটাডেটা থাকে, যেমন ফাইলের নাম, আকার, তৈরির সময় এবং কাস্টম মেটাডেটা।
বৈশিষ্ট্য
name
ফাইলের পাথ সহ ফাইলের পুরো নাম ধারণকারী একটি স্ট্রিং।
// Allow reads if the resource name is "path/to/object" allow read: if resource.name == 'path/to/object'
bucket
Google ক্লাউড স্টোরেজ বাকেট ধারণকারী একটি স্ট্রিং এই ফাইলটি সংরক্ষণ করা হয়েছে৷
// Allow reads of all resources in your bucket allow read: if resource.bucket == '<your-cloud-storage-bucket>'
generation
ফাইলের Google ক্লাউড স্টোরেজ অবজেক্ট জেনারেশন ধারণকারী একটি int। অবজেক্ট সংস্করণের জন্য ব্যবহৃত হয়।
// Allow reads if the resource matches a known object version allow read: if resource.generation == <known-generation>
metageneration
ফাইলটির Google ক্লাউড স্টোরেজ অবজেক্ট মেটাজেনারেশন ধারণকারী একটি int। অবজেক্ট সংস্করণের জন্য ব্যবহৃত হয়।
// Allow reads if the resource matches a known object metadata version allow read: if resource.metageneration == <known-generation>
size
বাইট ফাইলের আকার ধারণকারী একটি int.
// Allow reads if the resource is less than 10 MB allow read: if resource.size < 10 * 1024 * 1024;
timeCreated
ফাইলটি কখন তৈরি করা হয়েছিল তা উপস্থাপন করে একটি টাইমস্ট্যাম্প।
// Allow reads if the resource was created less than an hour ago allow read: if resource.timeCreated < request.time + duration.value(60, "m")
updated
একটি টাইমস্ট্যাম্প প্রতিনিধিত্ব করে কখন ফাইলটি সর্বশেষ আপডেট করা হয়েছিল।
// Allow reads if the resource was updated less than an hour ago allow read: if resource.updated < request.time + duration.value(60, "m")
md5Hash
ফাইলের MD5 হ্যাশ ধারণকারী একটি স্ট্রিং।
// Allow writes if the hash of the uploaded file is the same as the existing file allow write: if request.resource.md5Hash == resource.md5Hash;
crc32c
ফাইলের crc32c হ্যাশ ধারণকারী একটি স্ট্রিং।
// Allow writes if the hash of the uploaded file is the same as the existing file allow write: if request.resource.crc32c == resource.crc32c;
etag
ফাইলের etag ধারণকারী একটি স্ট্রিং।
// Allow writes if the etag matches a known object etag allow write: if resource.etag == <known-generation>
contentDisposition
ফাইলের বিষয়বস্তু স্বভাব ধারণকারী একটি স্ট্রিং।
// Allow reads if the content disposition matches a certain value allow read: if resource.contentDisposition == 'inlined';
contentEncoding
ফাইলের বিষয়বস্তু এনকোডিং ধারণকারী একটি স্ট্রিং।
// Allow reads if the content is encoded with gzip allow read: if resource.contentEncoding == 'gzip';
contentLanguage
ফাইলের বিষয়বস্তুর ভাষা ধারণকারী একটি স্ট্রিং।
// Allow reads if the content language is Japanese allow read: if resource.contentLanguage == 'ja';
contentType
ফাইলের বিষয়বস্তুর ধরন ধারণকারী একটি স্ট্রিং।
// Allow reads if the content type is PNG. allow read: if resource.contentType == 'image/png';
metadata
একটি Map<String, String>
অতিরিক্ত বিকাশকারী প্রদত্ত মেটাডেটা ক্ষেত্র সমন্বিত।
// Allow reads if a certain metadata field matches a desired value allow read: if resource.metadata.customProperty == 'customValue';
firestore.get এবং firestore.exists
firestore.get()
এবং firestore.exists()
ফাংশনগুলি আপনাকে ক্লাউড ফায়ারস্টোরে নথিগুলি অ্যাক্সেস করার অনুমতি দেয় জটিল অনুমোদনের মানদণ্ডগুলি মূল্যায়ন করতে৷
firestore.get()
এবং firestore.exists()
ফাংশন উভয়ই সম্পূর্ণ-নির্দিষ্ট নথি পাথ আশা করে। firestore.get()
এবং firestore.exists()
এর জন্য পাথ তৈরি করার জন্য ভেরিয়েবল ব্যবহার করার সময়, আপনাকে $(variable)
সিনট্যাক্স ব্যবহার করে স্পষ্টভাবে ভেরিয়েবল এড়িয়ে যেতে হবে।
firestore.get
একটি ক্লাউড ফায়ারস্টোর নথির বিষয়বস্তু পান।
service firebase.storage { match /b/{bucket}/o { match /users/{club}/files/{fileId} { allow read: if club in firestore.get(/databases/(default)/documents/users/$(request.auth.uid)).data.memberships } } }
firestore.exists
একটি ক্লাউড ফায়ারস্টোর নথি বিদ্যমান কিনা তা পরীক্ষা করুন৷
service firebase.storage { match /b/{bucket}/o { match /users/{userId}/photos/{fileId} { allow read: if firestore.exists(/databases/(default)/documents/users/$(userId)/friends/$(request.auth.uid)) } } }
সেবা
service
একটি ক্লাউড স্টোরেজ সুরক্ষা নিয়ম ফাইলের প্রথম ঘোষণা, এবং এই নিয়মগুলি কোন পরিষেবাতে প্রযোজ্য হবে তা নির্দিষ্ট করে৷
নাম
name
সেবা বিধির নাম প্রযোজ্য হবে। একমাত্র বর্তমান মান হল firebase.storage
।
// Specify the service name service firebase.storage { match /b/{bucket}/o { ... } }
তথ্যের ধরণ
নিয়মের ভাষা আপনাকে is
অপারেটর ব্যবহার করে প্রকার পরীক্ষা করতে দেয়।
// For example
a is null
a is string
null
null
ডেটা টাইপ এমন একটি মান উপস্থাপন করে যা বিদ্যমান নেই।
allow read: if request.auth != null;
bool
bool
টাইপ একটি বুলিয়ান true
বা false
মান উপস্থাপন করে।
allow read: if true; // always succeeds allow write: if false; // always fails
তুলনা
==
অপারেটর ব্যবহার করে বুলিয়ান মান তুলনা করা যেতে পারে !=
।
বুলিয়ান অপারেশন
অপারেশন | অভিব্যক্তি |
---|---|
AND | x && y |
OR | x || y |
NOT | !x |
অপারেশন শর্ট সার্কিট, এবং true
, false
, বা একটি ত্রুটি ফেরত দিতে পারে।
allow read: if true || false; // always succeeds, short circuits at true allow write: if false && true; // always fails, short circuits at false
int
এবং float
int
এবং float
প্রকারগুলি সংখ্যার প্রতিনিধিত্ব করে। Ints হল: 0
, 1
, -2
, ইত্যাদি, যখন floats হল: 1.0
, -2.0
, 3.33
, ইত্যাদি।
Ints 64-বিট মান স্বাক্ষরিত, এবং floats হল 64-বিট IEEE 754 অনুগত মান। একটি float
মান সহ তুলনা এবং গাণিতিক ক্রিয়াকলাপগুলিতে ব্যবহৃত হলে int
এর মানগুলিকে float
করতে বাধ্য করা হবে।
তুলনা
==
, !=
, >
, <
, >=
, এবং <=
অপারেটর ব্যবহার করে Ints এবং floats তুলনা এবং অর্ডার করা যেতে পারে।
পাটিগণিত
Ints এবং floats যোগ করা যায়, বিয়োগ করা যায়, গুণ করা যায়, ভাগ করা যায়, moduloed এবং negated:
অপারেশন | অভিব্যক্তি |
---|---|
যোগ | x + y |
বিয়োগ | x - y |
গুণ | x * y |
বিভাগ | x / y |
মডুলো | x % y |
নেগেশান | -x |
গাণিতিক ফাংশন
ক্লাউড স্টোরেজের জন্য ফায়ারবেস সুরক্ষা নিয়মগুলি অভিব্যক্তিকে সরল করার জন্য গণিতের সহায়ক ফাংশনগুলিও প্রদান করে:
ফাংশন | বর্ণনা |
---|---|
math.ceil(x) | সাংখ্যিক মানের সিলিং |
math.floor(x) | সাংখ্যিক মানের মেঝে |
math.round(x) | নিকটতম int ইনপুট মান বৃত্তাকার |
math.abs(x) | ইনপুটের পরম মান |
math.isInfinite(x) | মান ±∞ কিনা পরীক্ষা করুন, একটি bool প্রদান করে |
math.isNaN(x) | মানটি একটি সংখ্যা NaN নয় কিনা তা পরীক্ষা করুন, একটি bool প্রদান করে |
string
তুলনা
==
, !=
, >
, <
, >=
, এবং <=
অপারেটর ব্যবহার করে স্ট্রিংগুলি লেক্সোগ্রাফিকভাবে তুলনা করা যায় এবং অর্ডার করা যায়।
সংমিশ্রণ
+
অপারেটর ব্যবহার করে স্ট্রিংগুলি সংযুক্ত করা যেতে পারে।
// Concatenate a file name and extension 'file' + '.txt'
সূচক এবং পরিসীমা
index
অপারেটর, string[]
, একটি স্ট্রিং প্রদান করে যা স্ট্রিং-এ প্রদত্ত সূচকে অক্ষর ধারণ করে।
// Allow reads of files that begin with 'a' match /{fileName} { allow read: if fileName[0] == 'a'; }
range
অপারেটর, string[i:j]
, একটি স্ট্রিং প্রদান করে যাতে নির্দিষ্ট সূচকের মধ্যে অক্ষর থাকে, i
(অন্তর্ভুক্ত) থেকে j
(এক্সক্লুসিভ) পর্যন্ত। যদি i
বা j
নির্দিষ্ট করা না থাকে, তারা যথাক্রমে 0 এবং স্ট্রিং এর আকার ডিফল্ট করে, কিন্তু পরিসীমা বৈধ হওয়ার জন্য কমপক্ষে i
বা j
নির্দিষ্ট করা আবশ্যক।
// Allow reads of files that begin with 'abcdef' match /{fileName} { allow read: if fileName[0:6] == 'abcdef'; }
প্রদত্ত সূচকগুলি স্ট্রিং বাউন্ড অতিক্রম করলে index
এবং range
অপারেটররা একটি ত্রুটি দেখাবে৷
size
স্ট্রিং-এ অক্ষরের সংখ্যা প্রদান করে।
// Allow files with names less than 10 characters match /{fileName} { allow write: if fileName.size() < 10; }
matches
একটি রেগুলার এক্সপ্রেশন ম্যাচ সঞ্চালন করে, যদি প্রদত্ত রেগুলার এক্সপ্রেশনের সাথে স্ট্রিংটি মেলে তাহলে true
ফেরত দেয়। Google RE2 সিনট্যাক্স ব্যবহার করে।
// Allow writes to files which end in ".txt" match /{fileName} { allow write: if fileName.matches('.*\\.txt') }
split
প্রদত্ত রেগুলার এক্সপ্রেশন অনুসারে একটি স্ট্রিংকে বিভক্ত করে এবং স্ট্রিংগুলির একটি list
প্রদান করে। Google RE2 সিনট্যাক্স ব্যবহার করে।
// Allow files named "file.*" to be uploaded match /{fileName} { allow write: if fileName.split('.*\\..*')[0] == 'file' }
path
পাথ হল ঐচ্ছিক প্যাটার্ন ম্যাচিং সহ ডিরেক্টরির মতো নাম। একটি ফরোয়ার্ড স্ল্যাশের উপস্থিতি /
একটি পাথ সেগমেন্টের শুরুকে বোঝায়।
path
একটি string
আর্গুমেন্টকে একটি path
রূপান্তর করে।
// Allow reads on a specific file path match /{allFiles=**} { allow read: if allFiles == path('/path/to/file'); }
timestamp
টাইমস্ট্যাম্পগুলি UTC-তে রয়েছে, সম্ভাব্য মানগুলি 0001-01-01T00.00.00Z থেকে শুরু হয় এবং 9999-12-31T23.59.59Z এ শেষ হয়৷
তুলনা
টাইমস্ট্যাম্পগুলিকে ==
, !=
, >
, <
, >=
, এবং <=
অপারেটর ব্যবহার করে তুলনা এবং অর্ডার করা যেতে পারে।
পাটিগণিত
টাইমস্ট্যাম্পগুলি নিম্নরূপ টাইমস্ট্যাম্প এবং সময়কালের মধ্যে যোগ এবং বিয়োগ সমর্থন করে:
অভিব্যক্তি | ফলাফল |
---|---|
timestamp + duration | timestamp |
duration + timestamp | timestamp |
timestamp - duration | timestamp |
timestamp - timestamp | duration |
duration + duration | duration |
duration - duration | duration |
date
একটি timestamp
মান যেখানে শুধুমাত্র year
, month
এবং day
থাকে।
// Allow reads on the same day that the resource was created. allow read: if request.time.date() == resource.timeCreated.date()
year
int হিসাবে বছরের মান, 1 থেকে 9999 পর্যন্ত।
// Allow reads on all requests made before 2017 allow read: if request.time.year() < 2017
month
int হিসাবে মাসের মান, 1 থেকে 12 পর্যন্ত।
// Allow reads on all requests made during the month of January allow read: if request.time.month() == 1;
day
int হিসাবে মাসের বর্তমান দিন, 1 থেকে 31 পর্যন্ত।
// Allow reads on all requests made during the first day of each month allow read: if request.time.day() == 1;
time
বর্তমান সময় ধারণকারী একটি duration
মান।
// Allow reads on all requests made before 12PM allow read: if request.time.time() < duration.time(12, 0, 0, 0);
hours
ঘন্টার মান একটি int হিসাবে, 0 থেকে 23 পর্যন্ত।
// Allow reads on all requests made before 12PM allow read: if request.time.hours() < 12;
minutes
int হিসাবে মিনিটের মান, 0 থেকে 59 পর্যন্ত।
// Allow reads during even minutes of every hour allow read: if request.time.minutes() % 2 == 0;
seconds
একটি int হিসাবে সেকেন্ডের মান, 0 থেকে 59 পর্যন্ত।
// Allow reads during the second half of each minute allow read: if request.time.seconds() > 29;
nanos
একটি int হিসাবে ন্যানো ভগ্নাংশ সেকেন্ড.
// Allow reads during the first 0.1 seconds of each second allow read: if request.time.nanos() < 100000000;
dayOfWeek
সপ্তাহের দিন, 1 (সোমবার) থেকে 7 (রবিবার) পর্যন্ত।
// Allow reads on weekdays (Monday to Friday) allow read: if request.time.dayOfWeek() < 6;
dayOfYear
চলতি বছরের ১ থেকে ৩৬৬ তারিখ পর্যন্ত।
// Allow reads every fourth day allow read: if request.time.dayOfYear() % 4 == 0;
toMillis
ইউনিক্স যুগ থেকে মিলিসেকেন্ডের বর্তমান সংখ্যা প্রদান করে।
// Allow reads if the request is made before a specified time allow read: if request.time.toMillis() < <milliseconds>;
duration
সময়কালের মান ন্যানোসেকেন্ডে সেকেন্ড প্লাস ভগ্নাংশ সেকেন্ড হিসাবে উপস্থাপিত হয়।
তুলনা
==
, !=
, >
, <
, >=
, এবং <=
অপারেটর ব্যবহার করে সময়কাল তুলনা করা এবং অর্ডার করা যেতে পারে।
পাটিগণিত
সময়কাল টাইমস্ট্যাম্প এবং সময়কালের মধ্যে যোগ এবং বিয়োগ সমর্থন করে:
অভিব্যক্তি | ফলাফল |
---|---|
timestamp + duration | timestamp |
duration + timestamp | timestamp |
timestamp - duration | timestamp |
timestamp - timestamp | duration |
duration + duration | duration |
duration - duration | duration |
seconds
বর্তমান সময়ের মধ্যে সেকেন্ডের সংখ্যা। -315,576,000,000 এবং +315,576,000,000 এর মধ্যে হতে হবে।
nanos
বর্তমান সময়ের ভগ্নাংশের সেকেন্ডের সংখ্যা (ন্যানোসেকেন্ডে)। -999,999,999 এবং +999,999,999 এর মধ্যে হতে হবে। অ-শূন্য সেকেন্ড এবং অ-শূন্য ন্যানোনসেকেন্ডের জন্য, উভয়ের চিহ্ন অবশ্যই একমত হতে হবে।
duration.value
duration.value(int magnitude, string units)
ফাংশন ব্যবহার করে সময়কাল তৈরি করা যেতে পারে, যা প্রদত্ত মাত্রা এবং ইউনিট থেকে একটি সময়কাল তৈরি করে।
// All of these durations represent one hour: duration.value(1, "h") duration.value(60, "m") duration.value(3600, "s")
সম্ভাব্য unit
হল:
সময়কাল | unit |
---|---|
সপ্তাহ | w |
দিন | d |
ঘন্টার | h |
মিনিট | m |
সেকেন্ড | s |
মিলিসেকেন্ড | ms |
ন্যানোসেকেন্ড | ns |
duration.time
duration.time(int hours, int minutes, int seconds, int nanoseconds)
ফাংশন ব্যবহার করে সময়কাল তৈরি করা যেতে পারে, যা প্রদত্ত ঘন্টা, মিনিট, সেকেন্ড এবং ন্যানোসেকেন্ডের সময়কাল তৈরি করে।
// Create a four hour, three minute, two second, one nanosecond duration duration.time(4, 3, 2, 1)
list
একটি তালিকায় মানগুলির একটি অর্ডারকৃত অ্যারে থাকে, যা হতে পারে এই ধরনের: null
, bool
, int
, float
, string
, path
, list
, map
, timestamp
বা duration
।
দেওয়া x
এবং টাইপ list
y
এবং টাইপ int
এর i
এবং j
সৃষ্টি
একটি তালিকা তৈরি করতে, বন্ধনীগুলির মধ্যে মান যুক্ত করুন:
// Create a list of strings ['apples', 'grapes', 'bananas', 'cheese', 'goats']
তুলনা
==
অপারেটর ব্যবহার করে তালিকা তুলনা করা যেতে পারে !=
। দুটি তালিকার সমতা সব মান সমান হতে হবে.
সূচক এবং পরিসীমা
index
অপারেটর, list[]
, তালিকায় প্রদত্ত সূচীতে আইটেমটি ফেরত দেয়।
// Allow reads of all files that begin with 'a' match /{fileName} { allow read: if fileName[0] == 'a'; }
range
অপারেটর, list[i:j]
, নির্দিষ্ট সূচকগুলির মধ্যে একটি তালিকার সমস্ত আইটেম ফেরত দেয়, i
(অন্তর্ভুক্ত) থেকে j
(এক্সক্লুসিভ) পর্যন্ত। যদি i
বা j
নির্দিষ্ট করা না থাকে, তারা যথাক্রমে 0 এবং তালিকার আকারে ডিফল্ট, তবে পরিসরটি বৈধ হওয়ার জন্য কমপক্ষে i
বা j
নির্দিষ্ট করা আবশ্যক।
// Allow reads of all files that begin with 'abcdef' match /{fileName} { allow read: if fileName[0:6] == 'abcdef'; }
in
পছন্দসই মান তালিকায় উপস্থিত থাকলে true
বা উপস্থিত না থাকলে false
দেখায়।
// Allow read if a filename has the string 'txt' in it match /{fileName} { allow read: if 'txt' in fileName.split('\\.'); }
join
প্রদত্ত স্ট্রিং দ্বারা পৃথক করা একটি একক স্ট্রিং-এ স্ট্রিংগুলির একটি তালিকাকে একত্রিত করে৷
// Allow reads if the joined array is 'file.txt' allow read: if ['file', 'txt'].join('.') == 'file.txt';
size
তালিকায় আইটেম সংখ্যা.
// Allow read if there are three items in our list allow read: if ['foo', 'bar', 'baz'].size() == 3;
hasAll
তালিকায় সমস্ত মান উপস্থিত থাকলে true
দেখায়।
// Allow read if one list has all items in the other list allow read: if ['file', 'txt'].hasAll(['file', 'txt']);
map
একটি মানচিত্রে কী/মান জোড়া থাকে, যেখানে কীগুলি স্ট্রিং এবং মানগুলি যেকোনও হতে পারে: null
, bool
, int
, float
, string
, path
, list
, map
, timestamp
বা duration
।
সৃষ্টি
একটি মানচিত্র তৈরি করতে, বন্ধনীর মধ্যে কী/মান জোড়া যোগ করুন:
// Create a map of strings to strings { 'mercury': 'mars', 'rain': 'cloud', 'cats': 'dogs', }
তুলনা
==
অপারেটর ব্যবহার করে মানচিত্র তুলনা করা যেতে পারে !=
। দুটি মানচিত্রের সমতা প্রয়োজন সমস্ত কী উভয় মানচিত্রে উপস্থিত এবং সমস্ত মান সমান।
সূচক
একটি মানচিত্রের মানগুলি বন্ধনী বা ডট নোটেশন ব্যবহার করে অ্যাক্সেস করা হয়:
// Access custom metadata properties allow read: if resource.metadata.property == 'property' allow write: if resource.metadata['otherProperty'] == 'otherProperty'
একটি কী উপস্থিত না থাকলে, একটি error
ফেরত দেওয়া হবে৷
in
পছন্দসই কী মানচিত্রে উপস্থিত থাকলে true
বা উপস্থিত না থাকলে false
দেখায়।
// Allow reads if a property is present in the custom metadata allow read: if property in resource.metadata;
size
মানচিত্রে কী সংখ্যা।
// Allow reads if there's exactly one custom metadata key allow read: if resource.metadata.size() == 1;
keys
মানচিত্রে সমস্ত কীগুলির একটি তালিকা৷
// Allow reads if the first metadata key is 'myKey' allow read: if resource.metadata.keys()[0] == 'myKey';
values
মূল ক্রমে মানচিত্রের সমস্ত মানগুলির একটি তালিকা৷
// Allow reads if the first metadata value is 'myValue' allow read: if resource.metadata.values()[0] == 'myValue';
ত্রুটি
ত্রুটি মূল্যায়ন
ক্লাউড স্টোরেজের জন্য ফায়ারবেস নিরাপত্তা নিয়ম ত্রুটির সম্মুখীন হলে মূল্যায়ন চালিয়ে যায়। এটি দরকারী কারণ শর্তসাপেক্ষ &&
এবং ||
অভিব্যক্তি একটি ত্রুটি শোষণ করতে পারে যদি শর্তসাপেক্ষ অন্যথায় যথাক্রমে false
বা true
শর্ট-সার্কিট করে। এই ক্ষেত্রে:
অভিব্যক্তি | ফলাফল |
---|---|
error && true | error |
error && false | false |
error || true | true |
error || false | error |
সাধারণ স্থান যেখানে ত্রুটি উত্থাপিত হয়: শূন্য দ্বারা বিভাজন, একটি তালিকা বা মানচিত্রের মানগুলি অ্যাক্সেস করা যা বিদ্যমান নেই এবং একটি ফাংশনে ভুল ধরণের মান পাস করা৷
// Error if resource.size is zero allow read: if 1000000 / resource.size; // Error, key doesn't exist allow read: if resource.metadata.nonExistentKey == 'value'; // Error, no unit 'y' exists allow read: if request.time < resource.timeCreated + duration.value(1, 'y');