Правило безопасности базы данных Firebase реального времени получает дочернее имя

#firebase #firebase-realtime-database #firebase-security

#firebase #firebase-realtime-database #firebase-безопасность

Вопрос:

Есть ли способ получить имя дочернего элемента? Структура выглядит следующим образом:

 appointment-
           |- "here_is_some_date"-
                                 |-"some_user_id"-
                                                 |-details about it
  

Мне нужно определить правило для того, кто может читать «встречи», но я не уверен, как получить название даты, чтобы я мог получить доступ к UID. Это то, что я пробовал:

 "appointments": {
        ".read": "data.child(data.val()).child(auth.uid).val() === auth.uid"
      }
  

Ответ №1:

Единственный способ прочитать значение дочернего узла в правилах безопасности Firebase — это знать точный путь от текущего узла (где определено правило) к дочернему узлу.

Итак, если вы знаете и дату, и UID (что вы определенно знаете), вы можете прочитать значение дочернего узла с помощью:

 "appointments": {
  ".read": "data.child('here_is_some_date').child('some_user_id').val() === auth.uid"
}
  

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

 "user_appointment_dates": {
  "uid1": {
    "date1": true // or a more complete structure with the actual appointments
  }
}