क्लाउड स्टोरेज के लिए फायरबेस सुरक्षा नियमों का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्लाउड स्टोरेज में संग्रहीत फ़ाइलों को पढ़ने और लिखने की पहुंच किसके पास है, साथ ही फाइलें कैसे संरचित हैं और उनमें कौन सा मेटाडेटा है। क्लाउड स्टोरेज सुरक्षा नियम उन नियमों से बने होते हैं जो किसी वांछित कार्रवाई को अनुमति देने या अस्वीकार करने के लिए 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
) के साथ-साथ फायरबेस प्रमाणीकरण JWT ( request.auth.token
) के दावों से भर जाता है।
request.auth.token
में निम्नलिखित में से कुछ या सभी कुंजियाँ शामिल हैं:
मैदान | विवरण |
---|---|
email | खाते से संबद्ध ईमेल पता, यदि मौजूद है। |
email_verified | true यदि उपयोगकर्ता ने सत्यापित कर लिया है कि उनके पास email पते तक पहुंच है। कुछ प्रदाता अपने स्वामित्व वाले ईमेल पते को स्वचालित रूप से सत्यापित करते हैं। |
phone_number | खाते से संबद्ध फ़ोन नंबर, यदि मौजूद है। |
name | उपयोगकर्ता का प्रदर्शन नाम, यदि सेट हो। |
sub | उपयोगकर्ता का फायरबेस यूआईडी. यह किसी प्रोजेक्ट के भीतर अद्वितीय है. |
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 क्लाउड स्टोरेज ऑब्जेक्ट पीढ़ी शामिल है। ऑब्जेक्ट वर्जनिंग के लिए उपयोग किया जाता है।
// Allow reads if the resource matches a known object version allow read: if resource.generation == <known-generation>
metageneration
एक इंट जिसमें फ़ाइल का Google क्लाउड स्टोरेज ऑब्जेक्ट मेटाजेनरेशन शामिल है। ऑब्जेक्ट वर्जनिंग के लिए उपयोग किया जाता है।
// 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
एक स्ट्रिंग जिसमें फ़ाइल का ईटैग है ।
// 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.मौजूद है
जांचें कि क्या क्लाउड फायरस्टोर दस्तावेज़ मौजूद है।
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
प्रकार संख्याओं का प्रतिनिधित्व करते हैं। इंट्स हैं: 0
, 1
, -2
, आदि, जबकि फ्लोट्स हैं: 1.0
, -2.0
, 3.33
, आदि।
इनट्स हस्ताक्षरित 64-बिट मान हैं, और फ्लोट्स 64-बिट आईईईई 754 अनुरूप मान हैं। float
मान के साथ तुलना और अंकगणितीय संचालन में उपयोग किए जाने पर int
प्रकार के मानों को float
के लिए बाध्य किया जाएगा।
तुलना
इनट्स और फ्लोट्स की तुलना ==
, !=
, >
, <
, >=
, और <=
ऑपरेटरों का उपयोग करके की जा सकती है और ऑर्डर किया जा सकता है।
अंकगणित
इंट्स और फ्लोट्स को जोड़ा, घटाया, गुणा, विभाजित, संशोधित और नकारा जा सकता है:
संचालन | अभिव्यक्ति |
---|---|
जोड़ना | x + y |
घटाव | x - y |
गुणा | x * y |
विभाजन | x / y |
सापेक्ष | x % y |
नकार | -x |
गणितीय कार्य
क्लाउड स्टोरेज के लिए फायरबेस सुरक्षा नियम अभिव्यक्ति को सरल बनाने के लिए कई गणित सहायक कार्य भी प्रदान करते हैं:
समारोह | विवरण |
---|---|
math.ceil(x) | संख्यात्मक मान की सीमा |
math.floor(x) | संख्यात्मक मान का तल |
math.round(x) | इनपुट मान को निकटतम पूर्णांक में पूर्णांकित करें |
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
पूर्णांक के रूप में वर्ष का मान, 1 से 9999 तक।
// Allow reads on all requests made before 2017 allow read: if request.time.year() < 2017
month
एक पूर्णांक के रूप में महीने का मान, 1 से 12 तक।
// Allow reads on all requests made during the month of January allow read: if request.time.month() == 1;
day
एक पूर्णांक के रूप में महीने का वर्तमान दिन, 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
पूर्णांक के रूप में घंटे का मान 0 से 23 तक है।
// Allow reads on all requests made before 12PM allow read: if request.time.hours() < 12;
minutes
पूर्णांक के रूप में मिनट का मान 0 से 59 तक है।
// Allow reads during even minutes of every hour allow read: if request.time.minutes() % 2 == 0;
seconds
सेकंड का मान एक पूर्णांक के रूप में, 0 से 59 तक।
// Allow reads during the second half of each minute allow read: if request.time.seconds() > 29;
nanos
एक इंट के रूप में नैनो में भिन्नात्मक सेकंड।
// 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
चालू वर्ष का दिन, 1 से 366 तक।
// 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
।
प्रकार की list
x
और 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');