правила firebase для дочерних, но не родительских элементов

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

# #javascript #firebase #firebase-база данных в реальном времени #firebase-безопасность

Вопрос:

Я использую Firebase и хочу разрешить запись на дочернем элементе, но не на родительском.

У меня есть коллекция, которая называется guests . Пользователи могут устанавливать для него данные, используя свой идентификатор пользователя, записывая данные в: guests/userId Я хочу запретить пользователю записывать данные для guests: /guests .

Это мои правила:

 {
  "rules": {
    ".read": false,
    ".write": false,
    "guests": {
       ".write": "newData.exists()",
    }
  }
}
 

С помощью приведенных выше правил пользователь может запускать обе команды:

 guests.child(userId).set(profileData);
guests.set(profileData);
 

Я хочу создать правило, запрещающее ему запускать вторую строку: guests.set(profileData);

Ответ №1:

Вы можете использовать подстановочный знак для идентификатора пользователя:

 "rules": {
  ".read": false,
  ".write": false,
  "guests": {
    ".read": false,
    ".write": false,
    "$user_id": {
      ".write": "newData.exists()",
    }
  }
}
 

Комментарии:

1. ".read": false, И ".write": false, ниже guest не нужны, поскольку они уже унаследованы от корня.