ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

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

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

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

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

نظرة عامة على أمان قاعدة بيانات الوقت الفعلي

توفر قاعدة بيانات 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 تقييم إلى خطأ.

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

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

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

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

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

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

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

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

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

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

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

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