Google 致力于为黑人社区推动种族平等。查看具体举措
This page was translated by the Cloud Translation API.
Switch to English

রিয়েলটাইম ডেটাবেস বিধিগুলিতে শর্তাদি ব্যবহার করুন

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

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

  • ব্যবহারকারীর অনুমোদন পরীক্ষা করুন
  • সদ্য জমা দেওয়া ডেটার বিপরীতে বিদ্যমান ডেটা মূল্যায়ন করুন
  • আপনার ডাটাবেসের বিভিন্ন অংশ অ্যাক্সেস এবং তুলনা করুন
  • আগত ডেটা বৈধ করুন
  • সুরক্ষা যুক্তি জন্য আগত প্রশ্নের কাঠামো ব্যবহার করুন

পাথ বিভাগগুলি ক্যাপচার করতে $ ভেরিয়েবল ব্যবহার করা

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

{
  "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')"
        }
      }
    }
  }
}

গতিশীল $ ভেরিয়েবলগুলি ধ্রুবক নামের নামের সাথে সমান্তরালেও ব্যবহার করা যেতে পারে। এই উদাহরণস্বরূপ, আমরা .validate $other ভেরিয়েবল ব্যবহার করে একটি। .validate নিয়ম ঘোষণা করতে যা নিশ্চিত করে যে widget title এবং color ছাড়া অন্য কোনও শিশু নেই। অতিরিক্ত বাচ্চাদের তৈরি হওয়ার ফলে যে কোনও লেখা ব্যর্থ হবে।

{
  "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 }
    }
  }
}

প্রমাণীকরণ

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

আপনার অ্যাপ Firebase প্রমাণীকরণ ব্যবহার করে থাকেন, তাহলে request.auth পরিবর্তনশীল ক্লায়েন্ট তথ্য অনুরোধ জন্য প্রমাণীকরণ তথ্য উপস্থিত রয়েছে। request.auth সম্পর্কে আরও তথ্যের জন্য, রেফারেন্স ডকুমেন্টেশন দেখুন

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

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

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

auth পূর্বে নিয়মগুলিতে পূর্বনির্ধারিত auth পরিবর্তনশীলটি বাতিল হয়।

একবার ব্যবহারকারীর ফায়ারবেস প্রমাণীকরণের মাধ্যমে প্রমাণীকরণ করা হলে এটিতে নিম্নলিখিত বৈশিষ্ট্যগুলি অন্তর্ভুক্ত থাকবে:

প্রদানকারী প্রমাণীকরণ পদ্ধতি ব্যবহার করা হয়েছে ("পাসওয়ার্ড", "বেনামে", "ফেসবুক", "গিথুব", "গুগল", বা "টুইটার")।
uid একটি অনন্য ব্যবহারকারী আইডি, সমস্ত সরবরাহকারীদের মধ্যে অনন্য হওয়ার গ্যারান্টিযুক্ত।
টোকেন ফায়ারবেস এথ আইডি টোকেনের সামগ্রী। আরও তথ্যের জন্য auth.token জন্য রেফারেন্স ডকুমেন্টেশন দেখুন।

এখানে প্রতিটি উদাহরণ কেবল ব্যবহারকারী-নির্দিষ্ট পথে লিখতে পারে তা নিশ্চিত করতে auth নিয়মটি auth ব্যবহার করে:

{
  "rules": {
    "users": {
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

প্রমাণীকরণের শর্তাদি সমর্থন করার জন্য আপনার ডাটাবেস গঠন করা

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

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid"
      }
    }
  }
}

প্রমাণীকরণ কাস্টম দাবিগুলির সাথে কাজ করা

বিভিন্ন ব্যবহারকারীর জন্য কাস্টম অ্যাক্সেস নিয়ন্ত্রণের প্রয়োজন এমন অ্যাপ্লিকেশনগুলির জন্য, ফায়ারবেস প্রমাণীকরণ বিকাশকারীদের ফায়ারবেস ব্যবহারকারীর উপর দাবি সেট করার অনুমতি দেয়। এই বিধিগুলি আপনার বিধিগুলিতে auth.token পরিবর্তনশীলটিতে auth.token । এখানে নিয়মগুলির একটি উদাহরণ রয়েছে যা hasEmergencyTowel - hasEmergencyTowel কাস্টম দাবিটি ব্যবহার করে:

{
  "rules": {
    "frood": {
      // A towel is about the most massively useful thing an interstellar
      // hitchhiker can have
      ".read": "auth.token.hasEmergencyTowel === true"
    }
  }
}

বিকাশকারীরা তাদের নিজস্ব কাস্টম প্রমাণীকরণ টোকেন তৈরি করে optionচ্ছিকভাবে এই টোকেনগুলিতে দাবি যুক্ত করতে পারে। এই দাবীগুলি আপনার বিধিগুলিতে auth.token ভেরিয়েবলের উপর auth.token

বিদ্যমান ডেটা বনাম নতুন ডেটা

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

উদাহরণস্বরূপ, এই নিয়মটি আমাদেরকে নতুন রেকর্ড তৈরি করতে বা বিদ্যমানগুলি মুছতে অনুমতি দেবে, কিন্তু বিদ্যমান নন-নালায় ডেটা পরিবর্তন করতে নয়:

// we can write as long as old data or new data does not exist
// in other words, if this is a delete or a create, but not an update
".write": "!data.exists() || !newData.exists()"

অন্যান্য পথে ডেটা উল্লেখ করে

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

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

03 বি0 বি 96340

বৈধকরণের ডেটা

ডেটা স্ট্রাকচার .validate করা এবং ডেটা ফর্ম্যাট এবং সামগ্রীর বিষয়বস্তু যাচাইকরণ করা উচিত। .validate নিয়ম, যা কেবলমাত্র .write রুলের পরে চালানো হয় অ্যাক্সেস মঞ্জুর করতে সাফল্য অর্জন করে। নীচে একটি নমুনা। .validate নিয়ম সংজ্ঞা দেওয়া হয়েছে যা কেবলমাত্র 1900-2099 বছরের মধ্যে YYYY-MM-DD ফর্ম্যাটে তারিখগুলিকে অনুমতি দেয় যা নিয়মিত প্রকাশের সাহায্যে পরীক্ষা করা হয় checked

".validate": "newData.isString() &&
              newData.val().matches(/^(19|20)[0-9][0-9][-\\/. ](0[1-9]|1[012])[-\\/. ](0[1-9]|[12][0-9]|3[01])$/)"

.validate বিধিগুলি .validate একমাত্র ধরণের সুরক্ষা নিয়ম যা ক্যাসকেড হয় না। কোনও বৈধতা রুল যদি কোনও শিশু রেকর্ডে ব্যর্থ হয় তবে পুরো লেখার ক্রিয়াটি প্রত্যাখাত হবে। অতিরিক্তভাবে, ডেটা মোছার সময় বৈধতা সংজ্ঞাগুলি অগ্রাহ্য করা হয় (এটি হ'ল নতুন মানটি যখন null )।

এগুলি তুচ্ছ পয়েন্টগুলির মতো মনে হতে পারে তবে এটি শক্তিশালী ফায়ারবেস রিয়েলটাইম ডেটাবেস সুরক্ষা বিধিগুলি রচনার জন্য উল্লেখযোগ্য বৈশিষ্ট্য। নিম্নলিখিত নিয়মগুলি বিবেচনা করুন:

{
  "rules": {
    // write is allowed for all paths
    ".write": true,
    "widget": {
      // a valid widget must have attributes "color" and "size"
      // allows deleting widgets (since .validate is not applied to delete rules)
      ".validate": "newData.hasChildren(['color', 'size'])",
      "size": {
        // the value of "size" must be a number between 0 and 99
        ".validate": "newData.isNumber() &&
                      newData.val() >= 0 &&
                      newData.val() <= 99"
      },
      "color": {
        // the value of "color" must exist as a key in our mythical
        // /valid_colors/ index
        ".validate": "root.child('valid_colors/' + newData.val()).exists()"
      }
    }
  }
}

এই রূপটি মাথায় রেখে, নিম্নলিখিত রাইটিং ক্রিয়াকলাপগুলির ফলাফলগুলি দেখুন:

জাভাস্ক্রিপ্ট
var ref = db.ref("/widget");

// PERMISSION_DENIED: does not have children color and size
ref.set('foo');

// PERMISSION DENIED: does not have child color
ref.set({size: 22});

// PERMISSION_DENIED: size is not a number
ref.set({ size: 'foo', color: 'red' });

// SUCCESS (assuming 'blue' appears in our colors list)
ref.set({ size: 21, color: 'blue'});

// If the record already exists and has a color, this will
// succeed, otherwise it will fail since newData.hasChildren(['color', 'size'])
// will fail to validate
ref.child('size').set(99);
উদ্দেশ্য গ
FIRDatabaseReference *ref = [[[FIRDatabase database] reference] child: @"widget"];

// PERMISSION_DENIED: does not have children color and size
[ref setValue: @"foo"];

// PERMISSION DENIED: does not have child color
[ref setValue: @{ @"size": @"foo" }];

// PERMISSION_DENIED: size is not a number
[ref setValue: @{ @"size": @"foo", @"color": @"red" }];

// SUCCESS (assuming 'blue' appears in our colors list)
[ref setValue: @{ @"size": @21, @"color": @"blue" }];

// If the record already exists and has a color, this will
// succeed, otherwise it will fail since newData.hasChildren(['color', 'size'])
// will fail to validate
[[ref child:@"size"] setValue: @99];
সুইফট
var ref = FIRDatabase.database().reference().child("widget")

// PERMISSION_DENIED: does not have children color and size
ref.setValue("foo")

// PERMISSION DENIED: does not have child color
ref.setValue(["size": "foo"])

// PERMISSION_DENIED: size is not a number
ref.setValue(["size": "foo", "color": "red"])

// SUCCESS (assuming 'blue' appears in our colors list)
ref.setValue(["size": 21, "color": "blue"])

// If the record already exists and has a color, this will
// succeed, otherwise it will fail since newData.hasChildren(['color', 'size'])
// will fail to validate
ref.child("size").setValue(99);
জাভা
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("widget");

// PERMISSION_DENIED: does not have children color and size
ref.setValue("foo");

// PERMISSION DENIED: does not have child color
ref.child("size").setValue(22);

// PERMISSION_DENIED: size is not a number
Map<String,Object> map = new HashMap<String, Object>();
map.put("size","foo");
map.put("color","red");
ref.setValue(map);

// SUCCESS (assuming 'blue' appears in our colors list)
map = new HashMap<String, Object>();
map.put("size", 21);
map.put("color","blue");
ref.setValue(map);

// If the record already exists and has a color, this will
// succeed, otherwise it will fail since newData.hasChildren(['color', 'size'])
// will fail to validate
ref.child("size").setValue(99);
বিশ্রাম
# PERMISSION_DENIED: does not have children color and size
curl -X PUT -d 'foo' \
https://docs-examples.firebaseio.com/rest/securing-data/example.json

# PERMISSION DENIED: does not have child color
curl -X PUT -d '{"size": 22}' \
https://docs-examples.firebaseio.com/rest/securing-data/example.json

# PERMISSION_DENIED: size is not a number
curl -X PUT -d '{"size": "foo", "color": "red"}' \
https://docs-examples.firebaseio.com/rest/securing-data/example.json

# SUCCESS (assuming 'blue' appears in our colors list)
curl -X PUT -d '{"size": 21, "color": "blue"}' \
https://docs-examples.firebaseio.com/rest/securing-data/example.json

# If the record already exists and has a color, this will
# succeed, otherwise it will fail since newData.hasChildren(['color', 'size'])
# will fail to validate
curl -X PUT -d '99' \
https://docs-examples.firebaseio.com/rest/securing-data/example/size.json

এখন একই কাঠামো এ লুক দিন, কিন্তু ব্যবহার .write পরিবর্তে নিয়ম .validate :

{
  "rules": {
    // this variant will NOT allow deleting records (since .write would be disallowed)
    "widget": {
      // a widget must have 'color' and 'size' in order to be written to this path
      ".write": "newData.hasChildren(['color', 'size'])",
      "size": {
        // the value of "size" must be a number between 0 and 99, ONLY IF WE WRITE DIRECTLY TO SIZE
        ".write": "newData.isNumber() && newData.val() >= 0 && newData.val() <= 99"
      },
      "color": {
        // the value of "color" must exist as a key in our mythical valid_colors/ index
        // BUT ONLY IF WE WRITE DIRECTLY TO COLOR
        ".write": "root.child('valid_colors/'+newData.val()).exists()"
      }
    }
  }
}

এই রূপটিতে, নিম্নলিখিত যে কোনও ক্রিয়াকলাপ সফল হবে:

জাভাস্ক্রিপ্ট
var ref = new Firebase(URL + "/widget");

// ALLOWED? Even though size is invalid, widget has children color and size,
// so write is allowed and the .write rule under color is ignored
ref.set({size: 99999, color: 'red'});

// ALLOWED? Works even if widget does not exist, allowing us to create a widget
// which is invalid and does not have a valid color.
// (allowed by the write rule under "color")
ref.child('size').set(99);
উদ্দেশ্য গ
Firebase *ref = [[Firebase alloc] initWithUrl:URL];

// ALLOWED? Even though size is invalid, widget has children color and size,
// so write is allowed and the .write rule under color is ignored
[ref setValue: @{ @"size": @9999, @"color": @"red" }];

// ALLOWED? Works even if widget does not exist, allowing us to create a widget
// which is invalid and does not have a valid color.
// (allowed by the write rule under "color")
[[ref childByAppendingPath:@"size"] setValue: @99];
সুইফট
var ref = Firebase(url:URL)

// ALLOWED? Even though size is invalid, widget has children color and size,
// so write is allowed and the .write rule under color is ignored
ref.setValue(["size": 9999, "color": "red"])

// ALLOWED? Works even if widget does not exist, allowing us to create a widget
// which is invalid and does not have a valid color.
// (allowed by the write rule under "color")
ref.childByAppendingPath("size").setValue(99)
জাভা
Firebase ref = new Firebase(URL + "/widget");

// ALLOWED? Even though size is invalid, widget has children color and size,
// so write is allowed and the .write rule under color is ignored
Map<String,Object> map = new HashMap<String, Object>();
map.put("size", 99999);
map.put("color", "red");
ref.setValue(map);

// ALLOWED? Works even if widget does not exist, allowing us to create a widget
// which is invalid and does not have a valid color.
// (allowed by the write rule under "color")
ref.child("size").setValue(99);
বিশ্রাম
# ALLOWED? Even though size is invalid, widget has children color and size,
# so write is allowed and the .write rule under color is ignored
curl -X PUT -d '{size: 99999, color: "red"}' \
https://docs-examples.firebaseio.com/rest/securing-data/example.json

# ALLOWED? Works even if widget does not exist, allowing us to create a widget
# which is invalid and does not have a valid color.
# (allowed by the write rule under "color")
curl -X PUT -d '99' \
https://docs-examples.firebaseio.com/rest/securing-data/example/size.json

এটি .write এবং। .validate বিধিগুলির মধ্যে পার্থক্য চিত্রিত করে। প্রদর্শিত হিসাবে, এই সমস্ত নিয়মগুলি .validate ব্যবহার করে রচনা করা উচিত, নতুন newData.hasChildren() বিধি newData.hasChildren() , যা newData.hasChildren() অনুমতি দেওয়া উচিত কিনা তার উপর নির্ভর করে।

প্রশ্ন ভিত্তিক বিধি

যদিও আপনি ফিল্টার হিসাবে নিয়ম ব্যবহার করতে পারবেন না , আপনি আপনার নিয়মে কোয়েরি পরামিতি ব্যবহার করে ডেটা উপগ্রহে অ্যাক্সেস সীমাবদ্ধ করতে পারেন। 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.orderByChild == "address/zip" । যদি কোয়েরিটি কোনও শিশু নোড দ্বারা অর্ডার না করা হয় তবে এই মানটি শূন্য।
ক্যোয়ারী.স্টার্টএট
প্রশ্নের.endAt
ক্যোয়ারী.একুয়ালটো
স্ট্রিং
সংখ্যা
বুলিয়ান
খালি
এক্সিকিউটিভ ক্যোয়ারির সীমানা পুনরুদ্ধার করে, বা কোনও সীমাবদ্ধ সেট না থাকলে নাল ফেরায়।
ক্যোয়ারী.লিমিটটোফার্স্ট
ক্যোয়ারী.লিমিটটোস্ট
সংখ্যা
খালি
এক্সিকিউটিভ ক্যোয়ারির সীমাটি পুনরুদ্ধার করে, বা কোনও সীমা সেট না থাকলে শূন্য দেয়

পরবর্তী পদক্ষেপ

শর্তগুলির এই আলোচনার পরে, আপনি বিধি সম্পর্কে আরও পরিশীলিত বোঝাপড়া পেয়েছেন এবং এর জন্য প্রস্তুত:

কীভাবে মূল ব্যবহারের কেসগুলি পরিচালনা করবেন এবং নিয়মগুলি বিকাশ, পরীক্ষা ও স্থাপনের জন্য কর্মপ্রবাহ শিখুন:

রিয়েলটাইম ডেটাবেসের সাথে সুনির্দিষ্ট বিধি বৈশিষ্ট্যগুলি শিখুন: