В следующем примере updatedData.maxChips
установлен на число 50000, а updatedData.maxScore
не должно определяться.
function updatePlayerConditions(player) {
let updatedData = request.resource.data;
let originalData = resource.data;
let condition1 = updatedData.maxChips > 0 ? updatedData.maxChips == originalData.maxChips : true; // worked
let condition2 = updatedData.maxScore ? updatedData.maxScore = originalData.maxScore : true;
return condition1 && condition2;
}
Приведенный выше код для condition1 работает, но когда я меняю updatedData.maxChips > 0
на просто updatedData.maxChips
или !!updated.data.maxChips
не работает. Если JS правила правдивости применяются к правилам безопасности firestore, то для меня это не имеет смысла.
И я получаю сообщение об ошибке FirebaseError: PERMISSION_DENIED: from condition2.
Как я могу использовать неопределенное значение в правилах безопасности? Было бы особенно полезно, если бы кто-нибудь мог объяснить или указать, как в целом работают правила безопасности firebase firestore. Я уже смотрел здесь: https://firebase.google.com/docs/rules/rules-language#building_conditions
Обновление: я понял, что могу заменить updatedData.maxScore
в начале троичного на maxScore in updatedData
благодаря поиску этого вопроса: Правила безопасности Firestore: request.time "undefined on object" . Я все еще был бы рад найти или прочитать объяснение того, как работает правдивость в правилах безопасности пожарных хранилищ.