नियम: प्रकार
।पढ़ना
क्लाइंट को फ़ायरबेस रीयलटाइम डेटाबेस स्थान तक पढ़ने की पहुंच प्रदान करता है।
.read
नियम एक प्रकार का सुरक्षा नियम है जो क्लाइंट को फायरबेस रीयलटाइम डेटाबेस स्थान तक पढ़ने की पहुंच प्रदान करता है। उदाहरण के लिए:
".read": "auth != null && auth.provider == 'twitter'"
.read
नियम का मान एक स्ट्रिंग है, जिसे स्पष्टता और शुद्धता बढ़ाने के लिए कुछ व्यवहारिक परिवर्तनों के साथ जावास्क्रिप्ट के अभिव्यक्ति वाक्यविन्यास के सबसेट के रूप में मूल्यांकन किया जाता है। एक .read
नियम जो किसी स्थान को पढ़ने की अनुमति देता है, वह उस स्थान के किसी भी वंशज को पढ़ने की अनुमति भी देगा, भले ही वंशजों के पास अपने स्वयं के .read
नियम हों जो विफल हों।
एक .read
नियम के पास newData
को छोड़कर सभी फायरबेस रीयलटाइम डेटाबेस के नियम चर तक पहुंच है।
।लिखना
क्लाइंट को फ़ायरबेस रीयलटाइम डेटाबेस स्थान तक लेखन पहुंच प्रदान करता है।
.write
नियम एक प्रकार का सुरक्षा नियम है जो क्लाइंट को फायरबेस रीयलटाइम डेटाबेस स्थान तक लिखने की पहुंच प्रदान करता है। उदाहरण के लिए:
".write": "auth != null && auth.token.isAdmin == true"
.write
नियम का मान एक स्ट्रिंग है, जिसे स्पष्टता और शुद्धता बढ़ाने के लिए कुछ व्यवहारिक परिवर्तनों के साथ जावास्क्रिप्ट के अभिव्यक्ति वाक्यविन्यास के सबसेट के रूप में मूल्यांकन किया जाता है। एक .write
नियम जो किसी स्थान पर लिखने की अनुमति देता है, वह उस स्थान के किसी भी वंशज को भी लिखने की अनुमति देगा, भले ही वंशजों के पास अपने स्वयं के .write
नियम हों जो विफल हों।
एक .write
नियम के पास Firebase रीयलटाइम डेटाबेस के सभी नियम वेरिएबल्स तक पहुंच होती है।
.सत्यापित करें
एक बार .write
नियम द्वारा पहुंच प्रदान करने के बाद उपयोग किया जाता है, यह सुनिश्चित करने के लिए कि लिखा जा रहा डेटा एक विशिष्ट स्कीमा के अनुरूप है।
एक .validate
नियम का उपयोग एक बार .write
नियम द्वारा पहुंच प्रदान करने के बाद किया जाता है, ताकि यह सुनिश्चित किया जा सके कि लिखा जा रहा डेटा एक विशिष्ट मानक के अनुरूप है। .write
पहुंच प्रदान करने के अलावा, किसी लेखन की अनुमति देने से पहले सभी प्रासंगिक .validate
नियम सफल होने चाहिए। उदाहरण के लिए:
".validate": "newData.hasChildren(['name', 'age'])"
.validate
नियम का मान एक स्ट्रिंग है, जिसे स्पष्टता और शुद्धता बढ़ाने के लिए कुछ व्यवहारिक परिवर्तनों के साथ जावास्क्रिप्ट के अभिव्यक्ति वाक्यविन्यास के सबसेट के रूप में मूल्यांकन किया जाता है।
एक .validate
नियम के पास Firebase रीयलटाइम डेटाबेस के सभी नियम वेरिएबल्स तक पहुंच होती है।
.indexOn
फायरबेस रीयलटाइम डेटाबेस को यह बताकर क्वेरी प्रदर्शन में सुधार करता है कि आप किन कुंजियों को अपना डेटा अनुक्रमित करना चाहते हैं।
.indexOn
नियम आपके प्रश्नों के प्रदर्शन को बेहतर बनाने के लिए फायरबेस रीयलटाइम डेटाबेस सर्वर को आपके डेटा में विशिष्ट कुंजियों को अनुक्रमित करने के लिए कहता है। उदाहरण के लिए, डायनासोर डेटा के संग्रह वाला एक डेटाबेस दिया गया है, हम इस नियम को जोड़कर फायरबेस रीयलटाइम डेटाबेस को सर्वर से वापस आने से पहले प्रश्नों के लिए अनुकूलन करने के लिए कह सकते हैं:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}
आप अपने डेटा को अनुक्रमित करने पर सुरक्षा गाइड के अनुभाग का संदर्भ लेकर .indexOn
नियम के बारे में अधिक जानकारी प्राप्त कर सकते हैं।
नियम: चर
प्रमाणन
यदि क्लाइंट प्रमाणित है तो टोकन पेलोड वाला एक वैरिएबल, या यदि क्लाइंट प्रमाणित नहीं है तो null
।
फायरबेस रीयलटाइम डेटाबेस आपको कई अंतर्निहित प्रदाताओं को आसानी से प्रमाणित करने की अनुमति देता है और उनके लिए ऑथ टोकन उत्पन्न करेगा। किसी उपयोगकर्ता को अंतर्निहित प्रदाताओं में से किसी एक के साथ प्रमाणित करने के बाद, प्रमाणीकरण चर में निम्नलिखित शामिल होंगे:
मैदान | विवरण |
---|---|
provider | उपयोग की गई प्रमाणीकरण विधि (जैसे "पासवर्ड", "गुमनाम", "फेसबुक", "जीथब", "गूगल", या "ट्विटर")। |
uid | एक अद्वितीय उपयोगकर्ता आईडी, सभी प्रदाताओं के लिए अद्वितीय होने की गारंटी। |
token | फायरबेस ऑथ आईडी टोकन की सामग्री। auth.token देखें। |
उदाहरण के तौर पर, हमारे पास निम्नलिखित जैसा एक नियम हो सकता है जो उपयोगकर्ताओं को तब तक टिप्पणियाँ बनाने की अनुमति देता है जब तक वे टिप्पणी के साथ अपनी उपयोगकर्ता आईडी संग्रहीत करते हैं:
{
"rules": {
".read": true,
"$comment": {
".write": "!data.exists() && newData.child('user_id').val() == auth.uid"
}
}
}
हम उपयोगकर्ताओं को तब तक टिप्पणियाँ बनाने की अनुमति देने के लिए निम्नलिखित जैसा एक नियम भी बना सकते हैं, जब तक वे Facebook का उपयोग करके साइन इन हैं:
{
"rules": {
".read": true,
"$comment": {
".write": "!data.exists() && auth.provider == 'facebook'"
}
}
}
auth.टोकन
एक वैरिएबल जिसमें फ़ायरबेस ऑथ आईडी टोकन की सामग्री शामिल है।
टोकन में निम्नलिखित में से कुछ या सभी कुंजियाँ शामिल हैं:
मैदान | विवरण |
---|---|
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 |
यदि कस्टम प्रमाणीकरण का उपयोग किया जा रहा है, तो auth.token
में डेवलपर द्वारा निर्दिष्ट कोई भी कस्टम दावे भी शामिल हैं।
इन सभी मूल्यों का उपयोग नियमों के अंतर्गत किया जा सकता है। उदाहरण के लिए, gmail.com पते से जुड़े Google खातों तक पहुंच प्रतिबंधित करने के लिए, हम नियम जोड़ सकते हैं:
{
"rules": {
".read": "auth != null",
"gmailUsers": {
"$uid": {
".write": "auth.token.email_verified == true && auth.token.email.matches(/.*@gmail.com$/)"
}
}
}
}
पूर्णता के लिए, निम्नलिखित फ़ील्ड भी auth.token
में शामिल हैं, लेकिन नियमों के लिए उनके उपयोगी होने की संभावना नहीं है।
मैदान | विवरण |
---|---|
iss | टोकन जारीकर्ता. |
aud | टोकन के लिए दर्शक. |
auth_time | पिछली बार उपयोगकर्ता ने टोकन प्राप्त करने वाले डिवाइस का उपयोग करके क्रेडेंशियल के साथ प्रमाणीकरण किया था। |
iat | जिस समय टोकन जारी किया गया था. |
exp | वह समय जिस पर टोकन समाप्त हो जाता है. |
$स्थान
एक वेरिएबल जिसका उपयोग किसी $location
की कुंजी को संदर्भित करने के लिए किया जा सकता है जिसका उपयोग पहले नियम संरचना में किया गया था।
जब आपके नियम संरचना में $location
होता है, तो आप पढ़ने या लिखे जाने वाले वास्तविक बच्चे का नाम प्राप्त करने के लिए अपने नियम अभिव्यक्ति के भीतर एक मिलान वाले $
चर का उपयोग कर सकते हैं। तो मान लीजिए कि हम प्रत्येक उपयोगकर्ता को अपने स्वयं के /users/<user>
स्थान तक पढ़ने और लिखने की पहुंच देना चाहते हैं। हम उपयोग कर सकते हैं:
{
"rules": {
"users": {
"$user": {
".read": "auth.uid === $user",
".write": "auth.uid === $user"
}
}
}
}
जब कोई क्लाइंट /users/barney
तक पहुंचने का प्रयास करता है, $user
डिफ़ॉल्ट स्थान $user
के साथ मेल खाएगा जो "barney" के बराबर है। तो .read
नियम जाँच करेगा कि क्या auth.uid === 'barney'
। परिणामस्वरूप,
पढ़ना तभी सफल होगा जब क्लाइंट को "barney" के यूआईडी से प्रमाणित किया जाएगा।/users/barney
अब
फ़ायरबेस रीयलटाइम डेटाबेस सर्वर के अनुसार यूनिक्स युग के बाद से मिलीसेकंड की संख्या शामिल है।
फायरबेस रीयलटाइम डेटाबेस सर्वर के अनुसार now
वेरिएबल में UNIX युग के बाद से मिलीसेकंड की संख्या शामिल है। उदाहरण के लिए, आप इसका उपयोग यह सत्यापित करने के लिए कर सकते हैं कि उपयोगकर्ता द्वारा created
समय भविष्य में कभी भी समय पर सेट नहीं किया जाता है:
{
"rules": {
"users": {
"$user": {
"created": {
".validate": "newData.val() < now"
}
}
}
}
}
जड़
आपके फायरबेस रीयलटाइम डेटाबेस के मूल में वर्तमान डेटा के अनुरूप एक नियमडेटा स्नैपशॉट ।
रूट वेरिएबल आपको आपके फायरबेस रीयलटाइम डेटाबेस के रूट पर वर्तमान डेटा के अनुरूप एक रूलडेटा स्नैपशॉट देता है। आप इसका उपयोग अपने डेटाबेस में किसी भी डेटा को अपने नियम अभिव्यक्तियों में पढ़ने के लिए कर सकते हैं। उदाहरण के लिए, यदि हम उपयोगकर्ताओं को केवल तभी /comments
पढ़ने की अनुमति देना चाहते हैं जब उनके /users/<id>/active
सत्य पर सेट किया गया हो, तो हम इसका उपयोग कर सकते हैं:
{
"rules": {
"comments": {
".read": "root.child('users').child(auth.uid).child('active').val() == true"
}
}
}
फिर, यदि /users/barney/active
में सत्य मान शामिल है, तो "barney" के यूआईडी के साथ प्रमाणित उपयोगकर्ता /comments
नोड पर लिख सकता है।
डेटा
वर्तमान में निष्पादित नियम के स्थान पर फायरबेस रीयलटाइम डेटाबेस में वर्तमान डेटा के अनुरूप एक नियमडेटास्नैपशॉट ।
डेटा वैरिएबल आपको वर्तमान में निष्पादित नियम के डेटाबेस स्थान में वर्तमान डेटा के अनुरूप एक रूलडेटा स्नैपशॉट देता है (रूट के विपरीत, जो आपको आपके डेटाबेस के रूट के लिए डेटा देता है)।
उदाहरण के लिए, यदि आप किसी क्लाइंट को /users/<user>
तक पहुंचने देना चाहते हैं यदि /users/<user>/public
को सत्य पर सेट किया गया है, तो आप इसका उपयोग कर सकते हैं:
{
"rules": {
"users": {
"$user": {
".read": "data.child('public').val() == true"
}
}
}
}
डेटा वैरिएबल .read
, .write
, और .validate
नियमों में उपलब्ध है।
नए आंकड़े
यदि लिखने की अनुमति दी जाती है तो डेटा के अनुरूप एक नियमडेटा स्नैपशॉट परिणाम देगा।
.write
और .validate
नियमों के लिए, newData वैरिएबल आपको डेटा के अनुरूप एक नियमडेटा स्नैपशॉट देता है, जिसके परिणामस्वरूप यदि लिखने की अनुमति दी जाती है (यह मौजूदा डेटा के साथ-साथ लिखे जा रहे नए डेटा का "विलय" है)। इसलिए यदि आप यह सुनिश्चित करना चाहते हैं कि प्रत्येक उपयोगकर्ता का नाम और उम्र हो, तो आप इसका उपयोग कर सकते हैं:
{
"rules": {
"users": {
"$user": {
".read": true,
".write": true,
".validate": "newData.hasChildren(['name', 'age'])"
}
}
}
}
चूंकि न्यूडेटा मौजूदा डेटा और नए डेटा को मर्ज करता है, इसलिए यह "आंशिक" अपडेट के लिए भी ठीक से व्यवहार करता है। उदाहरण के लिए:
var fredRef = firebase.database().ref("users/fred");
// Valid since we have a name and age.
fredRef.set({ name: "Fred", age: 19 });
// Valid since we are updating the name but there's already an age.
fredRef.child("age").set(27);
// Invalid since the .validate rule will no longer be true.
fredRef.child("name").remove();
newData वैरिएबल .read
नियमों में उपलब्ध नहीं है क्योंकि कोई नया डेटा नहीं लिखा जा रहा है। आपको बस डेटा का उपयोग करना चाहिए।
नियमडेटास्नैपशॉट: विधियाँ
वैल()
इस नियमडेटास्नैपशॉट से आदिम मान ( string
, number
, boolean
, या null
) प्राप्त होता है।
वापसी मूल्य : ( String
, Number
, Boolean
, Null
) - इस नियमडेटास्नैपशॉट से आदिम मूल्य।
DataSnapshot.val()
के विपरीत, val()
एक RunDataSnapshot पर कॉल करने से, जिसमें चाइल्ड डेटा है, बच्चों वाला ऑब्जेक्ट वापस नहीं आएगा। इसके बजाय यह एक विशेष प्रहरी मान लौटाएगा। यह सुनिश्चित करता है कि नियम हमेशा अत्यंत कुशलतापूर्वक कार्य कर सकें।
परिणामस्वरूप, आपको बच्चों तक पहुँचने के लिए हमेशा child()
उपयोग करना चाहिए (जैसे data.child('name').val()
, data.val().name
नहीं)।
यह उदाहरण केवल पढ़ने की अनुमति देता है यदि पढ़ने योग्य बच्चे को पढ़ने के स्थान पर सत्य पर सेट किया गया है।
".read": "data.child('isReadable').val() == true"
बच्चा()
निर्दिष्ट सापेक्ष पथ पर स्थान के लिए एक नियमडेटा स्नैपशॉट प्राप्त करता है।
तर्क : childPath
String
- चाइल्ड डेटा के स्थान का एक सापेक्ष पथ।
रिटर्न वैल्यू : RuleDataSnapshot
- चाइल्ड लोकेशन के लिए रूलडेटा स्नैपशॉट ।
सापेक्ष पथ या तो एक साधारण बच्चे का नाम हो सकता है (उदाहरण के लिए 'फ़्रेड') या एक गहरा स्लैश-पृथक पथ (उदाहरण के लिए 'फ़्रेड/नाम/प्रथम')। यदि चाइल्ड स्थान में कोई डेटा नहीं है, तो एक खाली रूलडेटा स्नैपशॉट लौटाया जाता है।
यह उदाहरण केवल पढ़ने की अनुमति देता है यदि पढ़ने योग्य बच्चे को पढ़ने के स्थान पर सत्य पर सेट किया गया है।
".read": "data.child('isReadable').val() == true"
अभिभावक()
मूल स्थान के लिए एक रूलडेटा स्नैपशॉट प्राप्त होता है।
रिटर्न वैल्यू : RuleDataSnapshot
- मूल स्थान के लिए रूलडेटा स्नैपशॉट ।
यदि यह उदाहरण आपके फायरबेस रीयलटाइम डेटाबेस की जड़ को संदर्भित करता है, तो इसका कोई पैरेंट नहीं है, और parent()
विफल हो जाएगा, जिससे वर्तमान नियम अभिव्यक्ति को छोड़ दिया जाएगा (विफलता के रूप में)।
यह उदाहरण केवल पढ़ने की अनुमति देता है यदि isReadable सिबलिंग सत्य पर सेट है।
".read": "data.parent().child('isReadable').val() == true"
हैचाइल्ड(चाइल्डपाथ)
यदि निर्दिष्ट बच्चा मौजूद है तो सत्य लौटाता है।
तर्क : childPath
String
- संभावित बच्चे के स्थान का एक सापेक्ष पथ।
वापसी मूल्य : बूलियन - यदि निर्दिष्ट चाइल्ड पथ पर डेटा मौजूद है तो true
; अन्यथा false
.
यह उदाहरण केवल डेटा को लिखने की अनुमति देता है यदि इसमें बच्चे का "नाम" शामिल है।
".validate": "newData.hasChild('name')"
हैचिल्ड्रन([बच्चे])
बच्चों के अस्तित्व की जाँच करता है।
तर्क : children
Array
वैकल्पिक - चाइल्ड कुंजियों की एक सरणी जो सभी मौजूद होनी चाहिए।
वापसी मूल्य : Boolean
- true
यदि (निर्दिष्ट) बच्चे मौजूद हैं; अन्यथा false
.
यदि कोई तर्क प्रदान नहीं किया गया है, तो यदि रूलडेटा स्नैपशॉट में कोई संतान है तो यह सत्य लौट आएगा। यदि बच्चों के नामों की एक सरणी प्रदान की गई है, तो यह तभी सत्य होगी जब सभी निर्दिष्ट बच्चे रूलडेटास्नैपशॉट में मौजूद हों।
यह उदाहरण केवल डेटा को लिखने की अनुमति देता है यदि इसमें एक या अधिक बच्चे हों।
".validate": "newData.hasChildren()"
यह उदाहरण केवल डेटा को लिखने की अनुमति देता है यदि इसमें "नाम" और "उम्र" वाले बच्चे शामिल हैं।
".validate": "newData.hasChildren(['name', 'age'])"
मौजूद()
यदि इस नियमडेटा स्नैपशॉट में कोई डेटा है तो यह सत्य लौटाता है।
वापसी मूल्य : Boolean
- यदि नियमडेटा स्नैपशॉट में कोई डेटा है तो true
; अन्यथा false
.
यदि इस नियमडेटा स्नैपशॉट में कोई डेटा है तो मौजूद फ़ंक्शन सत्य लौटाता है। यह पूरी तरह से एक सुविधाजनक फ़ंक्शन है क्योंकि data.exists()
data.val() != null
के बराबर है।
यह उदाहरण इस स्थान पर तब तक लिखने की अनुमति देता है जब तक कोई मौजूदा डेटा न हो।
".write": "!data.exists()"
प्राथमिकता प्राप्त करें()
रूलडेटास्नैपशॉट में डेटा की प्राथमिकता प्राप्त करता है।
वापसी मूल्य : ( String
, Number
, Null
) - इस नियमडेटास्नैपशॉट में डेटा की प्राथमिकता।
यह उदाहरण सुनिश्चित करता है कि लिखे जा रहे नए डेटा की प्राथमिकता है
".validate": "newData.getPriority() != null"
isनंबर()
यदि इस नियमडेटा स्नैपशॉट में कोई संख्यात्मक मान है तो यह सत्य लौटाता है।
वापसी मूल्य : Boolean
- यदि डेटा संख्यात्मक है तो true
; अन्यथा false
.
यह उदाहरण सुनिश्चित करता है कि लिखे जा रहे नए डेटा में संख्यात्मक मान के साथ बच्चे की "आयु" है।
".validate": "newData.child('age').isNumber()"
isString()
यदि इस नियमडेटा स्नैपशॉट में एक स्ट्रिंग मान है तो यह सत्य लौटाता है।
वापसी मूल्य : Boolean
- यदि डेटा एक String
है तो true
है; अन्यथा false
.
यह उदाहरण सुनिश्चित करता है कि लिखे जा रहे नए डेटा में स्ट्रिंग मान के साथ चाइल्ड "नाम" है।
".validate": "newData.child('name').isString()
बूलियन() है
यदि इस रूलडेटा स्नैपशॉट में बूलियन मान है तो यह सत्य लौटाता है।
वापसी मूल्य : Boolean
- यदि डेटा Boolean
है तो true
है; अन्यथा false
.
यह उदाहरण सुनिश्चित करता है कि लिखे जा रहे नए डेटा में बूलियन मान के साथ चाइल्ड "सक्रिय" है।
".validate": "newData.child('active').isBoolean()"
स्ट्रिंग: गुण
लंबाई
स्ट्रिंग की लंबाई लौटाता है.
वापसी मान : Number
- स्ट्रिंग में वर्णों की संख्या।
इस उदाहरण के लिए आवश्यक है कि स्ट्रिंग में कम से कम 10 अक्षर हों।
".validate": "newData.isString() && newData.val().length >= 10"
स्ट्रिंग: तरीके
शामिल है (सबस्ट्रिंग)
यदि स्ट्रिंग में निर्दिष्ट सबस्ट्रिंग है तो सत्य लौटाता है।
तर्क : substring
String
- देखने के लिए एक सबस्ट्रिंग।
वापसी मान : Boolean
- यदि स्ट्रिंग में निर्दिष्ट सबस्ट्रिंग है तो true
; अन्यथा false
.
इस उदाहरण के लिए डेटा को "@" युक्त स्ट्रिंग होना आवश्यक है।
".validate": "newData.isString() && newData.val().contains('@')"
(सबस्ट्रिंग) से शुरू होता है
यदि स्ट्रिंग निर्दिष्ट सबस्ट्रिंग से शुरू होती है तो सत्य लौटाता है।
तर्क : substring
String
- शुरुआत में देखने के लिए एक सबस्ट्रिंग।
वापसी मान : Boolean
- यदि स्ट्रिंग में निर्दिष्ट सबस्ट्रिंग है तो true
; अन्यथा false
.
यदि auth.token.identifier
"आंतरिक-" से शुरू होता है तो यह उदाहरण पढ़ने की अनुमति देता है
".read": "auth.token.identifier.beginsWith('internal-')"
समाप्त होता है(सबस्ट्रिंग)
यदि स्ट्रिंग निर्दिष्ट सबस्ट्रिंग के साथ समाप्त होती है तो सत्य लौटाता है।
तर्क : substring
String
- अंत में देखने के लिए एक सबस्ट्रिंग।
वापसी मान : Boolean
- यदि स्ट्रिंग निर्दिष्ट सबस्ट्रिंग के साथ समाप्त होती है तो true
; अन्यथा false
.
यदि auth.token.identifier
"@company.com" पर समाप्त होता है तो यह उदाहरण पढ़ने की पहुंच की अनुमति देता है
".read": "auth.token.identifier.endsWith('@company.com')"
प्रतिस्थापित करें (सबस्ट्रिंग, प्रतिस्थापन)
निर्दिष्ट प्रतिस्थापन स्ट्रिंग के साथ प्रतिस्थापित निर्दिष्ट सबस्ट्रिंग के सभी उदाहरणों के साथ स्ट्रिंग की एक प्रति लौटाता है।
तर्क : substring String
- देखने के लिए एक सबस्ट्रिंग। replacement String
- सबस्ट्रिंग को बदलने के लिए एक स्ट्रिंग।
रिटर्न वैल्यू : String
- प्रतिस्थापन के साथ सबस्ट्रिंग को बदलने के बाद नई स्ट्रिंग।
replace()
विधि जावास्क्रिप्ट replace()
विधि से थोड़ी अलग है जिसमें यह निर्दिष्ट प्रतिस्थापन स्ट्रिंग के साथ निर्दिष्ट सबस्ट्रिंग के सभी उदाहरणों को बदल देती है, न कि केवल पहले उदाहरण को।
चूँकि कुंजियों में अवधियों की अनुमति नहीं है, इसलिए हमें उन्हें संग्रहीत करने से पहले अवधियों वाली स्ट्रिंग से बचना होगा। इसका एक उदाहरण ईमेल पते के साथ होगा। मान लें कि हमारे /whitelist/
नोड में श्वेतसूचीबद्ध ईमेल पतों की एक सूची है:
{
"user": {
"$uid": {
"email": <email>
}
},
"whitelist": {
"fred@gmail%2Ecom": true,
"barney@aol%2Ecom": true
}
}
हम एक नियम बना सकते हैं जो उपयोगकर्ताओं को केवल तभी जोड़ने की अनुमति देता है यदि उनका ईमेल /whitelist/
नोड में है:
{
"rules": {
"users": {
"$uid": {
".read": "true",
".write": "root.child('whitelist').child(newData.child('email').val().replace('.', '%2E')).exists()"
}
}
}
}
toLowerCase()
लोअरकेस में परिवर्तित स्ट्रिंग की एक प्रति लौटाता है।
रिटर्न वैल्यू : String
- स्ट्रिंग को लोअरकेस में परिवर्तित किया गया।
यह उदाहरण पढ़ने की पहुंच की अनुमति देता है यदि auth.token.identifier
क्योंकि सभी निचले मामले /users
के अंतर्गत मौजूद हैं।
".read": "root.child('users').child(auth.token.identifier.toLowerCase()).exists()"
toUpperCase()
अपरकेस में परिवर्तित स्ट्रिंग की एक प्रति लौटाता है।
रिटर्न वैल्यू : String
- स्ट्रिंग को अपरकेस में परिवर्तित किया गया।
यह उदाहरण पढ़ने की अनुमति देता है यदि auth.token.identifier
क्योंकि सभी ऊपरी मामले /users
के अंतर्गत मौजूद हैं।
".read": "root.child('users').child(auth.token.identifier.toUpperCase()).exists()"
मिलान(रेगेक्स)
यदि स्ट्रिंग निर्दिष्ट नियमित अभिव्यक्ति शाब्दिक से मेल खाती है तो सत्य लौटाता है।
वापसी मान : Boolean
- यदि स्ट्रिंग नियमित अभिव्यक्ति शाब्दिक, रेगेक्स से मेल खाती है तो true
; अन्यथा false
.
पूर्ण नियम रेगेक्स दस्तावेज़ देखें।
ऑपरेटर्स
+ (जोड़ें)
चर जोड़ने या स्ट्रिंग संयोजन के लिए उपयोग किया जाता है।
निम्नलिखित उदाहरण यह सुनिश्चित करता है कि नया मान मौजूदा मान में बिल्कुल एक की वृद्धि करता है। यह काउंटर लागू करने के लिए उपयोगी है:
".write": "newData.val() === data.val() + 1"
".validate": "root.child('room_names/' + $room_id).exists()"
- (नकारात्मक या घटाना)
नियम अभिव्यक्ति में किसी मान को नकारने या दो मान घटाने के लिए उपयोग किया जाता है।
यह सत्यापन नियम जाँचता है कि नया मान स्थान पर चाइल्ड मान का व्युत्क्रम है:
".validate": "newData.val() === -(data.child('quantity').val())"
निम्नलिखित उदाहरण यह सुनिश्चित करने के लिए घटाव का उपयोग करता है कि केवल पिछले दस मिनट के संदेश ही पढ़े जा सकते हैं:
".read": "newData.child('timestamp').val() > (now - 600000)"
* (गुणा)
नियम अभिव्यक्ति में चर को गुणा करने के लिए उपयोग किया जाता है।
यह सत्यापन नियम यह देखने के लिए जाँच करता है कि क्या नया मूल्य मूल्य और मात्रा (दो मौजूदा मान) के उत्पाद के बराबर है:
".validate": "newData.val() === data.child('price').val() * data.child('quantity').val()"
/ (विभाजित करना)
नियम अभिव्यक्ति में चर को विभाजित करने के लिए उपयोग किया जाता है।
निम्नलिखित उदाहरण में, सत्यापन नियम यह सुनिश्चित करता है कि संग्रहीत डेटा अन्यत्र संग्रहीत कुल डेटा का औसत है:
".validate": "newData.val() === data.parent().child('sum').val() / data.parent().child('numItems').val()"
% (मापांक)
नियम अभिव्यक्ति में एक चर को दूसरे से विभाजित करने पर शेषफल ज्ञात करने के लिए उपयोग किया जाता है।
यह नियम पुष्टि करता है कि केवल सम संख्याएँ ही लिखी जा सकती हैं:
".validate": "newData.val() % 2 === 0"
=== (बराबर)
यह जांचने के लिए उपयोग किया जाता है कि क्या नियम अभिव्यक्ति में दो चर का प्रकार और मान समान है।
निम्नलिखित नियम केवल उपयोगकर्ता खाते के स्वामी को लेखन पहुंच प्रदान करने के लिए === ऑपरेटर का उपयोग करता है। नियम का सही मूल्यांकन करने के लिए उपयोगकर्ता का यूआईडी कुंजी ( $user_id
) से बिल्कुल मेल खाना चाहिए।
"users": {
".write": "$user_id === auth.uid"
}
!== (बराबर नहीं)
यह जांचने के लिए उपयोग किया जाता है कि क्या नियम अभिव्यक्ति में दो चर समान नहीं हैं।
निम्नलिखित पठन नियम यह सुनिश्चित करता है कि केवल लॉग इन उपयोगकर्ता ही डेटा पढ़ सकते हैं:
".read": "auth !== null"
&& (और)
यदि दोनों ऑपरेंड सत्य हैं तो सत्य का मूल्यांकन करता है। नियम अभिव्यक्ति में एकाधिक स्थितियों का मूल्यांकन करने के लिए उपयोग किया जाता है।
निम्नलिखित सत्यापन नियम जाँचता है कि नया डेटा 100 वर्णों से कम की एक स्ट्रिंग है:
".validate": "newData.isString() && newData.val().length < 100"
|| (या)
यदि नियम अभिव्यक्ति में एक ऑपरेंड सत्य है, तो सत्य का मूल्यांकन करता है।
इस उदाहरण में, हम तब तक लिख सकते हैं जब तक पुराना डेटा या नया डेटा मौजूद नहीं है। दूसरे शब्दों में, यदि हम डेटा हटा रहे हैं या बना रहे हैं तो हम लिख सकते हैं, लेकिन डेटा अपडेट नहीं कर रहे हैं।
".write": "!data.exists() || !newData.exists()"
! (नहीं)
यदि इसका एकल ऑपरेंड गलत है, तो सत्य का मूल्यांकन करता है। नियम अभिव्यक्ति में, ! ऑपरेटर का उपयोग अक्सर यह देखने के लिए किया जाता है कि डेटा किसी स्थान पर लिखा गया है या नहीं।
निम्नलिखित नियम केवल तभी लिखने की अनुमति देता है जब निर्दिष्ट स्थान पर कोई डेटा न हो:
".write": "!data.exists()"
> (इससे अधिक)
यह जांचने के लिए उपयोग किया जाता है कि क्या नियम अभिव्यक्ति में कोई मान किसी अन्य मान से अधिक है।
यह सत्यापन नियम जाँचता है कि लिखी जा रही स्ट्रिंग कोई खाली स्ट्रिंग नहीं है:
".validate": "newData.isString() && newData.val().length > 0"
< (से कम)
यह जांचने के लिए उपयोग किया जाता है कि क्या नियम अभिव्यक्ति में कोई मान किसी अन्य मान से कम है।
यह सत्यापन नियम जाँचता है कि एक स्ट्रिंग 20 वर्णों से कम है:
".validate": "newData.isString() && newData.val().length < 20"
>= (इससे अधिक या इसके बराबर)
यह जांचने के लिए उपयोग किया जाता है कि नियम अभिव्यक्ति में कोई मान किसी अन्य मान से अधिक या उसके बराबर है या नहीं।
यह सत्यापन नियम जाँचता है कि लिखी जा रही स्ट्रिंग कोई खाली स्ट्रिंग नहीं है:
".validate": "newData.isString() && newData.val().length >= 1"
<= (इससे कम या इसके बराबर)
यह जांचने के लिए उपयोग किया जाता है कि नियम अभिव्यक्ति में कोई मान किसी अन्य मान से कम है या उसके बराबर है।
यह सत्यापन नियम सुनिश्चित करता है कि भविष्य में नया डेटा नहीं जोड़ा जा सकता है:
".validate": "newData.val() <= now"
? (टर्नरी ऑपरेटर)
सशर्त नियम अभिव्यक्ति का मूल्यांकन करने के लिए उपयोग किया जाता है।
टर्नरी ऑपरेटर तीन ऑपरेंड लेता है। से पहले ऑपरेंड ? शर्त है. यदि स्थिति सत्य पर मूल्यांकन करती है, तो दूसरे ऑपरेंड का मूल्यांकन किया जाता है। यदि स्थिति गलत है, तो तीसरे ऑपरेंड का मूल्यांकन किया जाता है।
निम्नलिखित सत्यापन नियम के लिए, नया मान एक संख्या या बूलियन हो सकता है। यदि यह एक संख्या है, तो यह 0 से अधिक होनी चाहिए।
".validate": "newData.isNumber() ? newData.val() > 0 : newData.isBoolean()"