# دليل إعداد قواعد الأمان لـ Firebase Realtime Database

## ⚠️ تحذير مهم

Firebase يرسل تحذيرات حول قواعد الأمان غير الآمنة. يجب تطبيق القواعد الآمنة التالية لحماية قاعدة البيانات.

## 📋 خطوات التطبيق

### 1. فتح Firebase Console

1. اذهب إلى [Firebase Console](https://console.firebase.google.com/)
2. اختر مشروعك: **almanara-65382**
3. من القائمة الجانبية، اختر **Realtime Database**
4. انقر على تبويب **Rules** (قواعد)

### 2. نسخ القواعد الآمنة

انسخ محتوى ملف `firebase-database-rules.json` والصقه في مربع القواعد في Firebase Console.

أو استخدم القواعد التالية مباشرة:

```json
{
  "rules": {
    "locations": {
      "$deviceId": {
        "$date": {
          "$locationId": {
            ".read": true,
            ".write": true,
            ".validate": "newData.hasChildren(['latitude', 'longitude', 'timestamp']) && (newData.child('latitude').isNumber() || newData.child('latitude').isString()) && (newData.child('longitude').isNumber() || newData.child('longitude').isString()) && newData.child('timestamp').isString() && newData.child('device_id').isString() && newData.child('device_id').val() == $deviceId"
          }
        },
        ".read": true,
        ".write": "!newData.exists()"
      },
      ".read": true,
      ".write": false
    },
    "$other": {
      ".read": false,
      ".write": false
    }
  }
}
```

### 3. نشر القواعد

1. انقر على زر **Publish** (نشر) في أعلى الصفحة
2. انتظر تأكيد النشر
3. ستختفي التحذيرات بعد بضع دقائق

## 🔒 شرح القواعد

### ما تفعله هذه القواعد:

1. **السماح بالقراءة والكتابة فقط في `locations/{deviceId}/{date}/{locationId}`**:
   - يمكن قراءة وكتابة المواقع الفردية فقط
   - لا يمكن حذف أو تعديل مجلدات كاملة

2. **التحقق من صحة البيانات**:
   - يجب أن تحتوي كل بيانات موقع على: `latitude`, `longitude`, `timestamp`
   - يمكن أن تكون `latitude` و `longitude` أرقاماً (number) أو سلاسل نصية (string)
   - يجب أن يكون `timestamp` من نوع string
   - يجب أن يكون `device_id` موجوداً ومطابقاً لـ `$deviceId` في المسار

3. **منع الوصول إلى أي شيء آخر**:
   - أي مسار خارج `locations/` محظور تماماً
   - لا يمكن القراءة أو الكتابة في أي مكان آخر

4. **السماح بحذف الأجهزة**:
   - يمكن حذف `locations/{deviceId}` بالكامل (عند حذف جهاز)
   - لا يمكن كتابة بيانات جديدة مباشرة في `locations/{deviceId}` (فقط الحذف مسموح)
   - فقط المواقع الفردية يمكن كتابتها في `locations/{deviceId}/{date}/{locationId}`

## ✅ الفوائد

- ✅ **أمان محسّن**: منع الوصول غير المصرح به
- ✅ **التحقق من البيانات**: ضمان صحة البيانات قبل الحفظ
- ✅ **منع التخريب**: منع حذف أو تعديل البيانات بشكل عشوائي
- ✅ **متوافق مع النظام الحالي**: يعمل مع PHP و Flutter بدون تغييرات

## 🧪 اختبار القواعد

بعد تطبيق القواعد، اختبر النظام:

1. افتح `dashboard.php` وتحقق من ظهور الأجهزة
2. تأكد من أن التطبيق يرسل المواقع بنجاح
3. تحقق من Firebase Console أن التحذيرات اختفت

## ⚠️ ملاحظات مهمة

- **لا تستخدم قواعد `.read: true, .write: true` على المستوى الجذري** - هذا غير آمن!
- **القواعد الحالية تسمح بالقراءة العامة** - إذا كنت تريد أماناً أكبر، يمكنك إضافة Firebase Authentication
- **التحقق من البيانات يضمن أن `device_id` في البيانات يطابق المسار** - هذا يمنع الكتابة في أجهزة أخرى

## 🔄 الترقية المستقبلية (اختياري)

إذا أردت أماناً أكبر، يمكنك:

1. إضافة Firebase Authentication
2. استخدام قواعد مثل:
```json
{
  "rules": {
    "locations": {
      "$deviceId": {
        ".read": "auth != null && auth.uid == $deviceId",
        ".write": "auth != null && auth.uid == $deviceId"
      }
    }
  }
}
```

لكن هذا يتطلب إضافة نظام مصادقة في التطبيق.

---

**تاريخ الإنشاء**: 2025-01-17  
**آخر تحديث**: 2025-01-17

