Check out what’s new from Firebase at Google I/O 2022. Learn more

فهم قواعد قاعدة بيانات Firebase Realtime

تحدد قواعد أمان قاعدة بيانات Firebase Realtime من الذي لديه حق الوصول إلى قاعدة البيانات الخاصة بك للقراءة والكتابة ، وكيفية تنظيم بياناتك ، والفهارس الموجودة. هذه القواعد موجودة على خوادم Firebase ويتم فرضها تلقائيًا في جميع الأوقات. سيتم إكمال كل طلب قراءة وكتابة فقط إذا سمحت قواعدك بذلك. بشكل افتراضي ، لا تسمح القواعد الخاصة بك لأي شخص بالوصول إلى قاعدة البيانات الخاصة بك. هذا لحماية قاعدة البيانات الخاصة بك من إساءة الاستخدام حتى يتوفر لديك الوقت لتخصيص القواعد الخاصة بك أو إعداد المصادقة.

تحتوي قواعد أمان قاعدة البيانات في الوقت الفعلي على بناء جملة يشبه JavaScript وتأتي في أربعة أنواع:

أنواع القواعد
.قرأ يصف ما إذا ومتى تم السماح للمستخدمين بقراءة البيانات.
.اكتب يصف ما إذا كان يُسمح بكتابة البيانات ومتى.
.validate يحدد الشكل الذي ستبدو عليه القيمة المنسقة بشكل صحيح ، وما إذا كانت تحتوي على سمات فرعية ، ونوع البيانات.
.indexOn يحدد الطفل الذي سيتم فهرسته لدعم الطلب والاستعلام.

نظرة عامة على أمان Realtime Database

توفر قاعدة بيانات Firebase Realtime مجموعة كاملة من الأدوات لإدارة أمان تطبيقك. تسهل هذه الأدوات مصادقة المستخدمين وفرض أذونات المستخدمين والتحقق من صحة المدخلات.

تعمل التطبيقات التي تعمل بنظام Firebase على تشغيل رموز من جانب العميل أكثر من تلك التي تحتوي على العديد من حزم التكنولوجيا الأخرى. لذلك ، قد تختلف الطريقة التي نتعامل بها مع الأمان قليلاً عما اعتدت عليه.

المصادقة

تتمثل الخطوة الأولى الشائعة في تأمين تطبيقك في تحديد المستخدمين. هذه العملية تسمى المصادقة . يمكنك استخدام مصادقة Firebase لجعل المستخدمين يسجلون الدخول إلى تطبيقك. تتضمن مصادقة Firebase دعمًا سريعًا لأساليب المصادقة الشائعة مثل Google و Facebook ، بالإضافة إلى تسجيل الدخول بالبريد الإلكتروني وكلمة المرور وتسجيل الدخول المجهول والمزيد.

هوية المستخدم هي مفهوم أمان مهم. تختلف البيانات باختلاف المستخدمين ، وفي بعض الأحيان يكون لديهم قدرات مختلفة. على سبيل المثال ، في تطبيق الدردشة ، ترتبط كل رسالة بالمستخدم الذي قام بإنشائها. قد يتمكن المستخدمون أيضًا من حذف رسائلهم الخاصة ، ولكن ليس الرسائل المرسلة من قبل مستخدمين آخرين.

تفويض

تحديد المستخدم الخاص بك هو فقط جزء من الأمن. بمجرد أن تعرف من هم ، فأنت بحاجة إلى طريقة للتحكم في وصولهم إلى البيانات الموجودة في قاعدة البيانات الخاصة بك. تسمح لك قواعد أمان قاعدة البيانات في الوقت الحقيقي بالتحكم في الوصول لكل مستخدم. على سبيل المثال ، إليك مجموعة من قواعد الأمان التي تسمح لأي شخص بقراءة المسار /foo/ ، لكن لا أحد يكتب إليه:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read قواعد القراءة .write ، لذا تمنح مجموعة القواعد هذه حق الوصول للقراءة إلى أي بيانات في المسار /foo/ بالإضافة إلى أي مسارات أعمق مثل /foo/bar/baz . لاحظ أن قواعد .read .write السطحية في قاعدة البيانات تلغي القواعد الأعمق ، لذلك لا يزال من الممكن منح حق الوصول للقراءة إلى /foo/bar/baz في هذا المثال حتى إذا تم تقييم القاعدة في المسار /foo/bar/baz إلى false.

تتضمن قواعد أمان قاعدة البيانات Realtime متغيرات ووظائف مضمنة تسمح لك بالإشارة إلى المسارات الأخرى والطوابع الزمنية من جانب الخادم ومعلومات المصادقة والمزيد. فيما يلي مثال على قاعدة تمنح حق الوصول للكتابة للمستخدمين المصادق عليهم إلى /users/<uid>/ ، حيث يمثل <uid> معرّف المستخدم الذي تم الحصول عليه من خلال مصادقة Firebase.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

تأكيد صحة البيانات

قاعدة بيانات Firebase Realtime غير مخطط لها. هذا يجعل من السهل تغيير الأشياء أثناء التطوير ، ولكن بمجرد أن يصبح تطبيقك جاهزًا للتوزيع ، من المهم أن تظل البيانات متسقة. تتضمن لغة .validate قاعدة التحقق من الصحة التي تتيح لك تطبيق منطق التحقق باستخدام نفس .write المستخدمة لقواعد .read والكتابة. الاختلاف الوحيد هو أن قواعد التحقق من الصحة لا تتالي ، لذلك يجب تقييم جميع قواعد التحقق من الصحة على أنها صحيحة حتى يُسمح بالكتابة.

تفرض هذه القاعدة أن البيانات المكتوبة إلى /foo/ يجب أن تكون سلسلة أقل من 100 حرف:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

تتمتع قواعد التحقق من الصحة بإمكانية الوصول إلى جميع الوظائف .read المضمنة مثل قواعد .write . يمكنك استخدام هذه لإنشاء قواعد التحقق من الصحة التي تدرك البيانات الموجودة في مكان آخر في قاعدة البيانات الخاصة بك ، وهوية المستخدم ، ووقت الخادم ، وغير ذلك الكثير.

تحديد فهارس قاعدة البيانات

تتيح قاعدة بيانات Firebase Realtime إمكانية طلب البيانات والاستعلام عنها. بالنسبة لأحجام البيانات الصغيرة ، تدعم قاعدة البيانات الاستعلام المخصص ، لذلك لا تكون الفهارس مطلوبة بشكل عام أثناء التطوير. قبل بدء تشغيل التطبيق الخاص بك ، من المهم تحديد الفهارس لأي استفسارات لديك للتأكد من استمرارها في العمل مع نمو تطبيقك.

يتم تحديد الفهارس باستخدام قاعدة .indexOn . فيما يلي مثال لإعلان الفهرس الذي سيفهرس حقلي الطول والطول لقائمة الديناصورات:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

الخطوات التالية

  • ابدأ التخطيط لتطوير قواعد قاعدة البيانات الخاصة بك.
  • تعرف على المزيد حول تأمين بياناتك باستخدام قواعد الأمان.
  • تعرف على المزيد حول تحديد الفهارس باستخدام القواعد.