Правило базы данных Firebase Realtime, чтобы избежать дублирования значений - PullRequest
0 голосов
/ 30 марта 2020

У меня есть следующая структура в базе данных Firebase Realtime:

{
  "e_pass": [
    {
      "address": "M12, AV Colony",
      "epass_id": "RPR/0003",
      "epass_vehicle_id": "na",
      "from_city": "Raipur",
      "from_date": "31-03-2020",
      "from_district": "Raipur",
      "from_location": "AV Colony Mowa",
      "isApproved": "1",
      "mobile_number": "99999999",
      "time_stamp": 1585577315093,
      "user_name": "John Doe",
      "vehicle_number": "CG04HX1234"
    }
  ]
}

Я пытаюсь применить следующее правило, чтобы предотвратить дублирование ключа mobile_number:

{
  "rules": {
    "e_pass": {
      ".read": true,
      ".write": {
        "$mobile_number": {
          ".write" : "!data.parent().hasChild($mobile_number)"
        }
      }
    }
  }
}

, но это продолжает терпеть неудачу. Каким должно быть правило?

1 Ответ

0 голосов
/ 31 марта 2020

С тем, как у вас сейчас есть структура данных, это невозможно. В общем случае невозможно использовать правила безопасности для обеспечения уникальности дочерних значений среди узлов-братьев.

Ваша альтернатива - записать значение, которое должно быть уникальным, в качестве имени узла (а не дочернего значения) где-то еще в база данных, к которой можно обратиться по правилам безопасности для проверки существования.

Например, если у вас есть узел с именем «mobile_numbers», вы можете заполнять дочерние узлы каждый раз, когда добавляется новый дочерний элемент e_pass:

"mobile_numbers": {
    "99999999": true
}

Затем вы проверяете его существование в следующем правиле:

root.child('mobile_numbers').hasChild($mobile_number)
...