Firebase ограничивает разрешение на чтение только для одного дочернего узла

Я создаю приложение с использованием 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"}

    }
}

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


person Sneha Jose    schedule 04.05.2018    source источник


Ответы (1)


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

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

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

Вариант 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
  }
}
person sketchthat    schedule 04.05.2018