تحدّد "قواعد الأمان في قاعدة بيانات Firebase في الوقت الفعلي" المستخدمين الذين يمكنهم قراءة بيانات قاعدة البيانات وكتابتها، وكيفية تنظيم بياناتك، والفهارس المتاحة. تكون هذه القواعد متاحة على خوادم Firebase ويتم تطبيقها تلقائيًا في جميع الأوقات. لن يتم إكمال أي طلب قراءة أو كتابة إلا إذا سمحت به قواعدك. لا تسمح قواعدك تلقائيًا لأي مستخدم بالوصول إلى قاعدة البيانات. يهدف ذلك إلى حماية قاعدة البيانات من إساءة الاستخدام إلى أن يتوفر لك الوقت لتخصيص قواعدك أو إعداد المصادقة.
تتضمّن "قواعد الأمان في قاعدة بيانات الوقت الفعلي" بنية تشبه JavaScript وتأتي بأربعة أنواع:
| أنواع القواعد | |
|---|---|
| .read | تصف ما إذا كان يُسمح للمستخدمين بقراءة البيانات ومتى. |
| .write | تصف ما إذا كان يُسمح بكتابة البيانات ومتى. |
| .validate | تحدّد شكل القيمة المنسّقة بشكل صحيح، وما إذا كانت تحتوي على سمات فرعية ونوع البيانات. |
| .indexOn | تحدّد حقلًا فرعيًا لفهرسته من أجل دعم الترتيب وطلبات البحث. |
نظرة عامة على أمان Realtime Database
توفر Firebase Realtime Database مجموعة كاملة من الأدوات لإدارة أمان تطبيقك. تسهّل هذه الأدوات مصادقة المستخدمين، وتطبيق أذونات المستخدمين، والتحقق من صحة الإدخالات.
تُشغّل التطبيقات المستندة إلى 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 هي "خطأ".
تتضمّن "قواعد الأمان في قاعدة بيانات الوقت الفعلي"
متغيرات
ودوال مضمّنة تتيح لك الإشارة إلى مسارات أخرى والطوابع الزمنية من جهة الخادم ومعلومات المصادقة، والمزيد. في ما يلي مثال على قاعدة تمنح إذن الكتابة للمستخدمين الذين تمّت مصادقتهم في المسار /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"]
}
}
}الخطوات التالية
- ابدأ التخطيط لتطوير القواعد لقاعدة البيانات.
- مزيد من المعلومات عن تأمين بياناتك باستخدام قواعد الأمان
- مزيد من المعلومات عن تحديد الفهارس باستخدام القواعد