Как разрешить запись только одного поля в правилах безопасности баз данных Firebase в реальном времени? - PullRequest
0 голосов
/ 10 января 2019

Мне нужен доступ на запись только в 1 поле, которое я определяю в правилах безопасности. Я пробовал с этим:

 "users":{  
     ".read":"auth !== null", 
       "$user_id" : {
        ".write":"newData.children.size() === 1 newData.hasChild('isConnected') && newData.child('isConnected').isBoolean()", // i know this is a little weird, but for prescence, it needs to be able to write to the user enpoint even if the token expired
      }

Но я получаю эту ошибку: нет такого метода / свойства 'children'.

1 Ответ

0 голосов
/ 10 января 2019

Определите правило для конкретного поля, а не для родителя. Убедитесь, что родительский объект нигде не разрешает запись, затем включите запись для отдельных полей на их собственных условиях:

"users":{  
  ".read": "auth !== null", 
  "$user_id": {
    "isConnected": {
      ".write": "newData.isBoolean()"
    }
  }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...