Правила Firebase setValue, только если существует ребенок - PullRequest
2 голосов
/ 30 марта 2019

Я пытаюсь использовать правила, но это не работает.

Вот структура:

enter image description here

У меня есть эта команда: DeleteItemFromListRef.child("List").child(obj.getsEventID()).child(ID).child("check").setValue(false);

Но я хочу установить значение «false» только в том случае, если дочерний элемент (ключ) существует, так что если элемент будет удален, у меня не будет просто этого:

enter image description here

Вот мои правила:

 "List": {
    "$listID" : {
      "$key": {
        "check" : {
      ".write":"data.child('List').child($listID).child($key).child('key').exists()"
    }
  }
}

}

Но, тем не менее, если дочерний ключ пуст, он все равно загружает данные следующим образом:

enter image description here

если кто-нибудь может помочь, было бы неплохо

РЕДАКТИРОВАТЬ 2: здесь гораздо более простые правила

"rules": {






           "List": {
            "$listID" : {
               "$key": {
                 "check" : {  
".read":"auth.uid != null", 
".write":"auth.uid != null", 
".validate":"data.parent().child('key').exists()"

}
}}}}}

+ КОММЕНТАРИИ:

Поэтому я всегда обновляю элемент картой, если добавляю новый, но если я изменяю только дочерний элемент "check" Я использую "setValue" метод и хочу setValue должно быть сделано, только если элемент уже существует (== child key already exist)

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Ну, вы также можете сначала проверить, существует ли ребенок, и по истине выполнить вышеуказанную команду.

1 голос
/ 30 марта 2019

Если вы хотите разрешить запись checked, если существует его родственное свойство key, вы можете сделать:

"List": {
    "$listID" : {
        "$key": {
            "check" : {
                ".validate":"data.parent().child('key').exists()"
            }
        }
    }
}

Обновить Поскольку у вас естьпроблема в том, чтобы заставить это работать, я только что проверил это в очень простой установке.В базе данных /55431756 у меня есть этот JSON:

{
  "has_key" : {
    "key" : "value"
  }
}

Так что это единственный ключ has_key с key.Теперь я запустил две симуляции: одна попытка записи в has_key.

Запись в has_key успешно выполнена, поскольку существует has_key/key:

imagehas_key is allowed">

Запись в no_key запрещена, поскольку no_key/key потомка нет:

imageno_key is denied">

...