Правила базы данных firebase позволяют писать на конкретном узле

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

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 ответ

Решение

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

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

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

Другие вопросы по тегам