Ссылка на данные в других путях связана с правилами безопасности Firebase - PullRequest
0 голосов
/ 16 декабря 2018

Я использую базу данных Firebase в реальном времени для создания игры в стиле покемонов.

Для каждого пользователя у него есть такая структура данных:

enter image description here

Каждая запись в узле «pokemon» имеет идентификатор, соответствующий идентификатору в узле «прослушиваемых покемонов».

Я хочу использовать правила безопасности, чтобы никто не мог создать новый узел в узле «pokemon» с идентификатором, существующим в узле «tappedpokemon».

Я пытался использовать такое правило:

{
  "rules": {
    "users": {
      "$user_id": {
        ".read": "$user_id === auth.uid",
        "tappedpokemon" : {
          "$id" : {
            ".write": "!data.exists() || !newData.exists()",
          }
        },
        "pokemon" : {
          "$mon" : {
            ".write": "!data.parent().parent().child('tappedpokemon').child(newData.child('id').val()).exists() && !data.exists()",
          }
        }
      }
    }
  }
}

Но этот код выдает истину каждый раз.

firebase.database().ref("users/" + firebase.auth().currentUser.uid + 
  "/tappedpokemon/" + "784193e6-6f94-49a1-958d-877080460a38").set(true);

pokemon_inventory_ref.push({id: "784193e6-6f94-49a1-958d-877080460a38", 
  name:"Lapras", lat:20, lng:38, date:Date.now(), 
  iv: Math.floor(Math.random() * (120 - 20 + 1)) + 20});

Есть лиспособ сделать это?

...