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

Я разрабатываю многопользовательскую игру с Firebase. Очки игрока записываются в базе данных после каждой игры, а также поле playerTotalScore обновляется с учетом нового итога. Мой вопрос: возможно ли защитить поле playerTotalScore от произвольных манипуляций со стороны пользователя, используя только правила безопасности на основе firebase? Если так, то как?

Я долго просматривал информацию о безопасности на базе Firebase. Хотя я понимаю, что в правилах безопасности можно реализовать некоторую сложную логику (увеличить число на определенную величину, напримерсуть или сделать поле только для вставки (".write": "!data.exists()" ), никакая информация, кажется, не помогает в этом случае. Правила только приращения не будут достаточны, потому что счет может управляться, увеличиваясь многократно. Только для вставки, кажется, вариант для totalScore, потому что он обновляется после каждой игры.

Обновить

По просьбе Като, здесь приведен конкретный вариант использования.

Игра, которую я разрабатываю, - это игра-викторина, в которой игроки отвечают на вопросы, и результаты игроков отображаются в режиме реального времени.

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

gameRef.child('players').child(UserId).child('score').set(gameScore)

После окончания игры totalScore (все сыгранные игры) для игрока рассчитывается какtotalScore=totalScore+gameScore и затем общий счет игроков обновляется в Firebase, используя следующее утверждение:

leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)
Обновление 2: структура данных в соответствии с просьбой Като

Вот конкретная структура, которая у меня сейчас есть. Это далеко не все, поэтому я готов изменить его так, как это необходимо, в соответствии с рекомендуемым подходом для защиты данных.

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

<firebase_root>/app/games/<gameId>/players/<userId>/score/

<gameId> является ключом, сгенерированным firebase, в результате вызова метода push () firebase.<UserId> это простой логин UID.

TotalScore (сумма всех очков за все сыгранные игры) для каждого пользователя (игрока) хранится в следующей структуре данных

<firebase_root>/app/leaderboard/<userId>/totalScore/

данные списка лидеров для totalScore устанавливаются с использованием totalScore в качестве приоритета для запросов

leaderboardRef.child(userId).setWithPriority({userName:userName, totalScore:totalScore}, totalScore)

Score и totalScore являются числовыми целочисленными значениями. Это все детали текущей структуры данных, о которых я могу думать.

Ответы на вопрос(3)

Ваш ответ на вопрос