правдивость в правилах безопасности пожарного склада - PullRequest
0 голосов
/ 14 июля 2020

В следующем примере 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" . Я все еще был бы рад найти или прочитать объяснение того, как работает правдивость в правилах безопасности пожарных хранилищ.

1 Ответ

1 голос
/ 14 июля 2020

Язык правил безопасности не применяет те же правила истинности, что и JavaScript. Если express вызывает логическое значение, вам необходимо предоставить там фактическое логическое выражение, иначе оно будет эффективно оцениваться как ошибка. Эта ошибка будет распространяться на оценку выражения, пока она окончательно не отклонит правило.

(Интересный факт: «ошибка» на самом деле является третьим состоянием логического типа - это не просто истина / ложь. Это нигде не задокументировано , потому что это только усложняет ситуацию для вашего типичного разработчика. Просто легче думать о любой ошибке как о прямом отклонении правила, не задумываясь о том, как именно это происходит.)

...