Firebase ограничивает разрешение на чтение только для одного дочернего узла - PullRequest
0 голосов
/ 04 мая 2018

Я создаю приложение с использованием firebase и сталкиваюсь с некоторыми проблемами с доступными настройками безопасности. Модель данных для этого приложения очень проста и выглядит следующим образом:

posts : {
         "$postid":{
            "meta":{
                "state":true,
                "text" :"I should be read",
            },
            "likes":{uid1,uid2},
            "rating":{uid1,uid2},
            "comments":{uid1,uid2},
            "tag":{tag1,tag2},
            "category":{cat1,cat2},
            "status":{1},
            "content":{},
            "createdTime":{},
        }

    }

Я применил следующие настройки безопасности:

"posts":
{
    ".read" : "auth != null",

    "$postid" :
    {
        "rating"{".write" : "auth != null"}

    }
}

Я хочу ограничить разрешение на чтение для внутреннего узла "rating". Как я могу применить это правило без изменения правила чтения корневого узла?

1 Ответ

0 голосов
/ 04 мая 2018

Правила Firebase отфильтровываются - поэтому если у вас есть правило для postid, тогда оно дает доступ на запись ко всему дочернему объекту.

Однако существует два разных способа защиты контента.

Вариант 1. Укажите ожидаемый объект, я бы посоветовал изучить Проверка данных на болте.

Вариант 2. Указывает каждый из дочерних объектов с разрешениями на запись;

"posts": {
  ".read": "auth != null",
  "$postid": {
    "meta": {
      ".write": "auth != null"
    },
    "likes": {
      ".write": "auth != null"
    },
    "comments": {
      ".write": "auth != null"
    },
    "tag": {
      ".write": "auth != null"
    },
    "category": {
      ".write": "auth != null"
    },
    "status": {
      ".write": "auth != null"
    },
    "content": {
      ".write": "auth != null"
    },
    "createdTime": {
      ".write": "auth != null"
    }
  }
}

Вам нужно будет настроить способ записи в объект, и это создаст много дополнительных взаимодействий с базой данных.

Идеальным решением было бы перенести рейтинг на другой объект, например;

"ratings": {
  ".read": "auth != null",
  "$postid": { 
     // New location of the rating
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...