تحدِّد "قواعد أمان قاعدة بيانات Firebase الآنية الاستجابة" المستخدمين الذين لديهم إذن بالقراءة والكتابة في قاعدة البيانات، وطريقة تنظيم بياناتك، والفهارس المتوفّرة. يتم تطبيق هذه القواعد على خوادم Firebase تلقائيًا في جميع الأوقات. لن يتم إكمال أي طلب قراءة وكتابة إلا إذا كانت قواعدك تسمح بذلك. بشكلٍ تلقائي، لا تسمح قواعدك لأيّ مستخدم بالوصول إلى قاعدة بياناتك. يهدف هذا الإجراء إلى حماية قاعدة بياناتك من إساءة الاستخدام إلى أن يكون لديك الوقت لتخصيص قواعدك أو إعداد المصادقة.
تتضمّن قواعد أمان "قاعدة بيانات الوقت الفعلي" بنية شبيهة ببنية JavaScript، وهي تأتي بأربعة أنواع:
أنواع القواعد | |
---|---|
.read | توضّح هذه السمة ما إذا كان يُسمح للمستخدمين بقراءة البيانات ومتى يُسمح لهم بذلك. |
.write | يصف ما إذا كان يُسمح بكتابة البيانات وحالات السماح بذلك. |
.validate | تحدّد هذه السمة الشكل الذي ستظهر به القيمة المنسّقة بشكل صحيح، وما إذا كانت تحتوي على سمات فرعية، ونوع البيانات. |
.indexOn | تُستخدَم لتحديد عنصر فرعي للفهرسة من أجل إتاحة الطلب وطلبات البحث. |
نظرة عامة على أمان Realtime Database
يوفّر Firebase Realtime Database مجموعة كاملة من الأدوات لإدارة أمان تطبيقك. تسهّل هذه الأدوات مصادقة المستخدمين، وفرض أذونات المستخدمين، والتحقّق من صحة الإدخالات.
تعمل التطبيقات المستندة إلى Firebase على تشغيل رمز من جهة العميل أكثر من التطبيقات التي تستخدم العديد من مجموعات التكنولوجيا الأخرى. لذلك، قد تكون طريقة تعاملنا مع الأمان مختلفة قليلاً عن المعتاد.
المصادقة
من الخطوات الشائعة الأولى لتأمين تطبيقك هو تحديد هوية المستخدمين. وتُعرف هذه العملية باسم المصادقة. يمكنك استخدام Firebase Authentication لطلب تسجيل دخول المستخدمين إلى تطبيقك. تتضمّن Firebase Authentication إمكانية استخدام طرق المصادقة الشائعة، مثل Google و Facebook، بالإضافة إلى تسجيل الدخول باستخدام عنوان البريد الإلكتروني وكلمة المرور وتسجيل الدخول بدون إظهار الهوية وغير ذلك.
تُعدّ هوية المستخدم مفهومًا مهمًا للأمان. يمتلك المستخدمون المختلفون بيانات مختلفة، وفي بعض الأحيان لديهم إمكانات مختلفة. على سبيل المثال، في تطبيق مراسلة، تكون كل رسالة مرتبطة بالمستخدم الذي أنشأها. قد يتمكّن المستخدمون أيضًا من حذف رسائلهم، ولكن ليس الرسائل التي نشرها مستخدمون آخرون.
التفويض
إنّ تحديد هوية المستخدم هو جزء فقط من الأمان. بعد معرفة هوية هؤلاء المستخدمين، تحتاج
إلى طريقة للتحكّم في إمكانية وصولهم إلى البيانات في قاعدة بياناتك. تتيح لك قواعد أمان "قاعدة بيانات الوقت الفعلي"
التحكّم في أذونات الوصول لكل مستخدم. على سبيل المثال، إليك مجموعة من
قواعد الأمان التي تسمح لأي مستخدم بقراءة المسار /foo/
، ولكن لا يمكنه
الكتابة فيه:
{ "rules": { "foo": { ".read": true, ".write": false } } }
يتم تطبيق قواعد .read
و.write
بشكل متسلسل، لذا تمنح مجموعة القواعد هذه
إذن الوصول للقراءة إلى أي بيانات في المسار /foo/
بالإضافة إلى أي مسارات
أعمق مثل /foo/bar/baz
. يُرجى العِلم أنّ قواعد .read
و
.write
الأقرب إلى السطح في قاعدة البيانات تلغي القواعد الأبعد، لذا
سيظلّ من الممكن منح إذن الوصول للقراءة إلى /foo/bar/baz
في هذا المثال
حتى إذا تم تقييم قاعدة في المسار /foo/bar/baz
على أنّها خطأ.
تتضمّن قواعد أمان "قاعدة بيانات الوقت الفعلي"
متغيّرات مضمّنة
ودوالّ تتيح لك
الإشارة إلى مسارات أخرى وطابعات زمنيّة من جهة الخادم ومعلومات المصادقة وغيرها. في ما يلي مثال على قاعدة تمنح إذن الكتابة
للمستخدمين المعتمَدين في /users/<uid>/
، حيث <uid> هو
رقم تعريف المستخدم الذي تم الحصول عليه من خلال Firebase Authentication.
{ "rules": { "users": { "$uid": { ".write": "$uid === auth.uid" } } } }
التحقّق من صحة البيانات
Firebase Realtime Database لا يتضمّن مخطّطًا. يسهّل ذلك تغيير العناصر أثناء عملية التطوير، ولكن بعد أن يصبح تطبيقك جاهزًا للنشر، من المهم أن تظل البيانات متسقة. تتضمّن لغة القواعد قاعدة .validate
تسمح لك بتطبيق منطق التحقّق باستخدام التعبيرات نفسها المستخدَمة
لقواعد .read
و.write
. الاختلاف الوحيد هو
أنّ قواعد التحقّق لا تسري بشكل متسلسل، لذا يجب تقييم جميع
قواعد التحقّق ذات الصلة على أنّها صحيحة لكي يُسمح بالكتابة.
تفرض هذه القواعد أن تكون البيانات المكتوبة في /foo/
سلسلة
أقصر من 100 حرف:
{ "rules": { "foo": { ".validate": "newData.isString() && newData.val().length < 100" } } }
يمكن لقواعد التحقّق الوصول إلى جميع الدوالّ المضمّنة
والمتغيّرات نفسها المتوفّرة في قواعد .read
و.write
. يمكنك استخدام
هذه القواعد لإنشاء قواعد التحقّق من الصحة التي تكون على دراية بالبيانات في مكان آخر في
قاعدة بياناتك، وهوية المستخدم، ووقت الخادم، وغير ذلك الكثير.
تحديد فهارس قاعدة البيانات
يسمح Firebase Realtime Database بترتيب البيانات وإجراء طلبات بحث عنها. بالنسبة إلى أحجام البيانات الصغيرة، تتيح قاعدة البيانات إجراء طلبات بحث خاصة، لذا لا تكون الفهارس مطلوبة بشكل عام أثناء التطوير. قبل إطلاق تطبيقك، من المهم تحديد الفهارس لأي طلبات بحث لديك لضمان استمرار عملها مع نمو تطبيقك.
يتم تحديد الفهارس باستخدام قاعدة .indexOn
. في ما يلي مثال على بيان
فهرس سيؤدّي إلى فهرسة حقلَي الارتفاع والطول لقائمة
الديناصورات:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
الخطوات التالية
- ابدأ بالتخطيط لتطوير القواعد لقاعدة بياناتك.
- اطّلِع على مزيد من المعلومات عن تأمين بياناتك باستخدام قواعد الأمان.
- اطّلِع على مزيد من المعلومات عن تحديد الفهارس باستخدام القواعد.