Обновлять поля Firebase только когда он пуст - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть набор данных в базе данных реального времени Firebase, как это.

Users
---Match
   ------User1
         mId:"12345"
         xId:""
   ------User2
         mId:"54321"
         xId:""

Здесь в основном разрабатывается функция сопоставления для нескольких игроков с использованием приложения android . Предполагается, что пользователь 1 сопоставляется с пользователем 2. Пользователь1 обновит свой собственный xId значение со значением user2 mId и user2 обновит свое собственное значение xId значением mId user1 .Это отлично работает, если есть два пользователя.Оба соединяются друг с другом и работают хорошо.Проблема возникает, когда 3 пользователя приходят одновременно.Пользователь 1 пишет пользователю 2, а пользователь 2 пишет пользователю 3 и создает несогласованный набор данных.Я хочу заблокировать значение, когда оно будет изменено, или мы можем сказать простое правило, например.

update user1 only : if(user1.xid=="")
update user2 only : if(user2.xid=="")

Возможно ли использовать правило безопасности firebase?

1 Ответ

0 голосов
/ 15 сентября 2018

Чтобы разрешить только запись новых данных (поэтому никогда не перезаписывайте и не удаляйте существующие данные), вам нужно это правило:

{
  "rules": {
    "Users": {
      "Match": {
        "uid": {
          ".validate": "!data.child('xid').exists() && newData.child('xid').exists()"
        }
      }
    }
  }
}

Для получения более подробной информации обратитесь к документации Firebase для правил безопасности , в частности, к разделу Новые и существующие данные .

...