правила базы данных firebase позволяют писать на конкретном узле - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующая база данных:

actions : [  {
  "added" : 1535293085383,
  "countdown" : 9999999999,
  "item" : 1,
  "type" : "a"
}, {
  "added" : 1535293085383,
  "countdown" : 999999999,
  "extra" : "bb",
  "item" : "2",
  "type" : "b"
}, {
  "added" : 1635293085383,
  "countdown" : 1,
  "item" : 3,
  "type" : "c"
}]

Я хочу, чтобы любой зарегистрированный пользователь мог прочитать все данные, но ТОЛЬКО НАПИШИТЕ УЗЕЛ ОБРАТНОЙ СВЯЗИ.

Моя идея - каждый раз, когда пользователичитать данные, уменьшить это значение, но им не разрешено обновлять любой другой узел

есть правила, которые я написал

    {
       "rules":{
          ".read":false,
          ".write":false,
          "actions":{
             ".indexOn":[
                "added"
             ],
             ".read": "auth != null",
           "countdown":{
             ".write" : "auth != null"
           }
          }
}

запрещение чтения от неаутентифицированных пользователей
эторазрешение читать от аутентифицированных пользователей
это запрещает писать от аутентифицированных пользователей ДАЖЕ в узле обратного отсчета

как я могу это исправить

1 Ответ

0 голосов
/ 22 октября 2018

Вам не хватает уровня в ваших правилах безопасности.Прямо сейчас вы разрешаете писать на /actions/countdown.Но вы хотите разрешить запись в /actions/*/countdown.Чтобы зафиксировать это требование, используйте переменную $ в своих правилах:

{
   "rules":{
      ".read":false,
      ".write":false,
      "actions":{
         ".indexOn": [ "added" ],
         ".read": "auth != null",
         "$actionid": {
           "countdown":{
             ".write" : "auth != null"
           }
         }
      }
}

Теперь, поскольку $actionid правило countdown/.write, приведенное ниже, применяется к каждому дочернему узлу /actions.

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