Подумайте о приложении опроса, в котором есть карта в документе Firestore. Эта карта имеет ключ голосования в виде строки и число в качестве значения (счетчик). Например, «что такое лучшая еда»:
{
...
...
poll : [
pizza : 10,
barbecue: 3,
pasta: 1,
...
]
...
}
Элементы могут отличаться в зависимости от опроса. Только один голос за пользователя. Голосовать могут только зарегистрированные пользователи (правило Firestore). Минимальная сумма равна нулю, люди могут переключаться с одного на другой (момент уменьшения). Кроме того, увеличение должно составлять только + 1.
Транзакции защищают приложение, чтобы избежать менее 0 для любого элемента и +1 контролируется там. Есть ли способ защиты с помощью правил Firestore? Честно говоря, я не уверен, если это необходимо.
Я могу получить затронутые предметы с помощью функций сравнения карт. Но как мне проверить, что указанное c измененное значение элемента? Результат сравнения карты приносит набор, однако я не могу использовать ключи, полученные набором в request.resource.data
, в противном случае проблема будет решена. Я мог бы проверить, равен ли он 0, а также проверить текущие данные, если разница равна 1.
Ключ наверняка будет на карте, поскольку он исходит из функции сравнения с самой карты.