রিয়েলটাইম ডেটাবেস বিধি ভাষার মূল বাক্য গঠন শিখুন

ফায়ারবেস রিয়েলটাইম ডেটাবেস সুরক্ষা নিয়ম আপনাকে আপনার ডাটাবেসে সঞ্চিত ডেটাতে অ্যাক্সেস নিয়ন্ত্রণ করতে দেয়। নমনীয় নিয়ম সিনট্যাক্স আপনাকে এমন নিয়ম তৈরি করতে দেয় যা আপনার ডাটাবেসে লেখা থেকে শুরু করে পৃথক নোডের অপারেশন পর্যন্ত যেকোনো কিছুর সাথে মেলে।

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

এই বিষয় মৌলিক সিনট্যাক্স এবং কাঠামো সম্পূর্ণ নিয়ম সেট তৈরি করতে ব্যবহৃত রিয়েলটাইম ডেটাবেস নিরাপত্তা নিয়ম বর্ণনা করে।

আপনার নিরাপত্তা নিয়ম গঠন

রিয়েলটাইম ডেটাবেস নিরাপত্তা নিয়মগুলি একটি JSON নথিতে থাকা JavaScript-এর মতো অভিব্যক্তি দিয়ে তৈরি। আপনার নিয়মের কাঠামো আপনার ডাটাবেসে সংরক্ষিত ডেটার কাঠামো অনুসরণ করা উচিত।

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

সুতরাং, উদাহরণস্বরূপ, যদি আমরা একটি নিরাপদ করার চেষ্টা করছেন child_node একটি অধীনে parent_node , ফলো সাধারণ সিনট্যাক্স হল:

{
  "rules": {
    "parent_node": {
      "child_node": {
        ".read": <condition>,
        ".write": <condition>,
        ".validate": <condition>,
      }
    }
  }
}

এর এই প্যাটার্ন প্রয়োগ করা যাক. উদাহরণস্বরূপ, ধরা যাক আপনি বার্তাগুলির একটি তালিকার উপর নজর রাখছেন এবং আপনার কাছে এমন ডেটা রয়েছে যা এইরকম দেখাচ্ছে:

{
  "messages": {
    "message0": {
      "content": "Hello",
      "timestamp": 1405704370369
    },
    "message1": {
      "content": "Goodbye",
      "timestamp": 1405704395231
    },
    ...
  }
}

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

{
  "rules": {
    // For requests to access the 'messages' node...
    "messages": {
      // ...and the individual wildcarded 'message' nodes beneath
      // (we'll cover wildcarding variables more a bit later)....
      "$message": {

        // For each message, allow a read operation if <condition>. In this
        // case, we specify our condition as "true", so read access is always granted.
        ".read": "true",

        // For read-only behavior, we specify that for write operations, our
        // condition is false.
        ".write": "false"
      }
    }
  }
}

মৌলিক নিয়ম অপারেশন

আছে: অপারেশন ধরনের উপর ভিত্তি করে নিরাপত্তা বলবত করতে নিয়ম তিন ধরনের ডেটার উপর সঞ্চালিত হয় হচ্ছে .write , .read এবং .validate । এখানে তাদের উদ্দেশ্যগুলির একটি দ্রুত সারসংক্ষেপ রয়েছে:

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

ওয়াইল্ডকার্ড ক্যাপচার ভেরিয়েবল

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

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

গতিশীল $ ভেরিয়েবল এছাড়াও ধ্রুবক পথ নামের সাথে সমান্তরাল ভাবে ব্যবহার করা যাবে। এই উদাহরণে, আমরা ব্যবহার করছি $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 }
    }
  }
}

পড়ুন এবং নিয়ম ক্যাসকেড লিখুন

.read এবং .write নিয়ম গভীর নিয়ম অগ্রাহ্য অগভীর নিয়ম, শীর্ষ-ডাউন থেকে কাজ করি। একটি নিয়ম অনুদান একটি নির্দিষ্ট পথ এ পড়তে বা লেখার অনুমতি ফেলেন, তাহলে এটি আরো অ্যাক্সেস অধীনস্থ সকল শিশু নোড প্রদান করছে। নিম্নলিখিত কাঠামো বিবেচনা করুন:

{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}

এই নিরাপত্তা কাঠামো অনুমতি দেয় /bar/ যখনই থেকে পড়তে হবে /foo/ একটি শিশুর রয়েছে baz মান true".read": false অধীনে নিয়ম /foo/bar/ যেহেতু এক্সেস একটি শিশু পথ কতৃক প্রত্যাহার করা যাবে না কোনো প্রভাব এখানে আছে।

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

লক্ষ্য করুন .validate নিয়ম নির্ঝর না। একটি লেখার অনুমতি দেওয়ার জন্য সমস্ত বৈধতা নিয়ম অনুক্রমের সমস্ত স্তরে সন্তুষ্ট হতে হবে৷

নিয়ম ফিল্টার নয়

নিয়ম একটি পারমাণবিক পদ্ধতিতে প্রয়োগ করা হয়. এর মানে হল যে একটি পঠন বা লেখার অপারেশন অবিলম্বে ব্যর্থ হয় যদি সেই অবস্থানে বা অভিভাবক অবস্থানে অ্যাক্সেসের অনুমতি না থাকে। এমনকি প্রতিটি প্রভাবিত শিশু পথ অ্যাক্সেসযোগ্য হলেও, পিতামাতার অবস্থানে পড়া সম্পূর্ণরূপে ব্যর্থ হবে। এই কাঠামো বিবেচনা করুন:

{
  "rules": {
    "records": {
      "rec1": {
        ".read": true
      },
      "rec2": {
        ".read": false
      }
    }
  }
}

বুঝতে নিয়ম atomically মূল্যায়ন করা হয় ছাড়া, আনার সময় মত মনে হতে পারে /records/ পাথ ফিরে আসবে rec1 কিন্তু rec2 । প্রকৃত ফলাফল, যাইহোক, একটি ত্রুটি:

জাভাস্ক্রিপ্ট
var db = firebase.database();
db.ref("records").once("value", function(snap) {
  // success method is not called
}, function(err) {
  // error callback triggered with PERMISSION_DENIED
});
উদ্দেশ্য গ
দ্রষ্টব্য: এই Firebase পণ্য অ্যাপ ক্লিপ লক্ষ্যে পাওয়া যায় না।
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[_ref child:@"records"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
  // success block is not called
} withCancelBlock:^(NSError * _Nonnull error) {
  // cancel block triggered with PERMISSION_DENIED
}];
সুইফট
দ্রষ্টব্য: এই Firebase পণ্য অ্যাপ ক্লিপ লক্ষ্যে পাওয়া যায় না।
var ref = FIRDatabase.database().reference()
ref.child("records").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // success block is not called
}, withCancelBlock: { error in
    // cancel block triggered with PERMISSION_DENIED
})
জাভা
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // success method is not called
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback triggered with PERMISSION_DENIED
  });
});
বিশ্রাম
curl https://docs-examples.firebaseio.com/rest/records/
# response returns a PERMISSION_DENIED error

পড়া অপারেশন যেহেতু /records/ পারমাণবিক, এবং সেখানে কোন পঠিত নিয়ম যে মধ্যে থাকা সমস্ত ডেটা থেকে অ্যাক্সেসের মঞ্জুরি দেওয়া হচ্ছে /records/ , এই একটি নিক্ষেপ করা হবে PERMISSION_DENIED ত্রুটি। আমরা আমাদের নিরাপত্তা কাল্পনিক এই নিয়ম মূল্যায়ন যদি Firebase কনসোল , আমরা দেখতে পারেন পঠিত অপারেশন কারণ পঠিত নিয়ম অ্যাক্সেস করা মঞ্জুরিপ্রাপ্ত অস্বীকৃত হয়েছে /records/ পথ। যাইহোক, নোট যে জন্য নিয়ম rec1 মূল্যায়ন কখনোই করা হয়েছে কারণ এটি না পাথ আমরা অনুরোধ ছিল। আনতে rec1 আমরা সরাসরি এটি অ্যাক্সেস করতে হবে:

জাভাস্ক্রিপ্ট
var db = firebase.database();
db.ref("records/rec1").once("value", function(snap) {
  // SUCCESS!
}, function(err) {
  // error callback is not called
});
উদ্দেশ্য গ
দ্রষ্টব্য: এই Firebase পণ্য অ্যাপ ক্লিপ লক্ষ্যে পাওয়া যায় না।
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[ref child:@"records/rec1"] observeSingleEventOfType:FEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
    // SUCCESS!
}];
সুইফট
দ্রষ্টব্য: এই Firebase পণ্য অ্যাপ ক্লিপ লক্ষ্যে পাওয়া যায় না।
var ref = FIRDatabase.database().reference()
ref.child("records/rec1").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // SUCCESS!
})
জাভা
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records/rec1");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // SUCCESS!
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback is not called
  }
});
বিশ্রাম
curl https://docs-examples.firebaseio.com/rest/records/rec1
# SUCCESS!

ওভারল্যাপিং স্টেটমেন্ট

একটি নোডে একাধিক নিয়ম প্রয়োগ করা সম্ভব। কেস যেখানে একাধিক নিয়ম এক্সপ্রেশন একটি নোড চিহ্নিত ইন, অ্যাক্সেস পদ্ধতি থেকে বঞ্চিত যদি অবস্থার কোন হয় false :

{
  "rules": {
    "messages": {
      // A rule expression that applies to all nodes in the 'messages' node
      "$message": {
        ".read": "true",
        ".write": "true"
      },
      // A second rule expression applying specifically to the 'message1` node
      "message1": {
        ".read": "false",
        ".write": "false"
      }
    }
  }
}

উপরের উদাহরণে, এর সার্চ message1 নোড অস্বীকার করা হবে দ্বিতীয় নিয়ম সবসময় কারণ false , যদিও প্রথম নিয়ম সর্বদা true

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

আপনি ফায়ারবেস রিয়েলটাইম ডেটাবেস সুরক্ষা নিয়ম সম্পর্কে আপনার বোঝার গভীরতা বাড়াতে পারেন:

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

  • টিপিক্যাল নিরাপত্তা ব্যবহারের ক্ষেত্রে ও পর্যালোচনা Firebase সিকিউরিটি রুলস সংজ্ঞা যে তাদের ঠিকানা