Правило Firestore для проверки значения поля Dynami c на карте - PullRequest
0 голосов
/ 28 апреля 2020

Подумайте о приложении опроса, в котором есть карта в документе Firestore. Эта карта имеет ключ голосования в виде строки и число в качестве значения (счетчик). Например, «что такое лучшая еда»:

{
...
...
poll : [
    pizza : 10,
    barbecue: 3,
    pasta: 1,
    ...
     ]
...
}

Элементы могут отличаться в зависимости от опроса. Только один голос за пользователя. Голосовать могут только зарегистрированные пользователи (правило Firestore). Минимальная сумма равна нулю, люди могут переключаться с одного на другой (момент уменьшения). Кроме того, увеличение должно составлять только + 1.

Транзакции защищают приложение, чтобы избежать менее 0 для любого элемента и +1 контролируется там. Есть ли способ защиты с помощью правил Firestore? Честно говоря, я не уверен, если это необходимо.

Я могу получить затронутые предметы с помощью функций сравнения карт. Но как мне проверить, что указанное c измененное значение элемента? Результат сравнения карты приносит набор, однако я не могу использовать ключи, полученные набором в request.resource.data, в противном случае проблема будет решена. Я мог бы проверить, равен ли он 0, а также проверить текущие данные, если разница равна 1.

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

...