Как определить, существует ли поле в документе Firestore в правилах безопасности - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть эти правила безопасности Firestore.Мне нужно проверить, не превышают ли баланс 3 сумм: «redAmount», «greenAmount» и «blackAmount», добавленные вместе.Если это так, обновление должно быть отклонено.

function checkSums() {
    return futureDocument().redAmount +  futureDocument().blackAmount + 
    futureDocument().blackAmount <= getUserDoc().amount;
}

Но эта функция завершается ошибкой, если одна из сумм не определена => не установлена, что я хочу, чтобы быть 0, но я не могу.Любые идеи о том, как это исправить?

Эта проблема не решается путем ссылки на вопрос «Как проверить, что поле не определено».

1 Ответ

0 голосов
/ 20 февраля 2019

Исправлено с помощью действительно безумного длинного обходного пути (вместо использования функций, использования или)

return checkMinusAmount('redAmount') && checkMinusAmount('blackAmount')
                   && checkMinusAmount('greenAmount') && (
                    (futureDocument().redAmount + futureDocument().blackAmount + futureDocument().greenAmount <= getUserDoc().amount) 
                    (futureDocument().redAmount + futureDocument().blackAmount <= getUserDoc().amount  !has('greenAmount')) 
                    (futureDocument().redAmount + futureDocument().greenAmount <= getUserDoc().amount  !has('blackAmount')) 
                    (futureDocument().greenAmount + futureDocument().blackAmount <= getUserDoc().amount  !has('redAmount')) 
                    (futureDocument().greenAmount <= getUserDoc().amount  (!has('redAmount') && !has('blackAmount'))) 
                    (futureDocument().blackAmount <= getUserDoc().amount  (!has('redAmount') && !has('greenAmount'))) 
                    (futureDocument().redAmount <= getUserDoc().amount  (!has('blackAmount') && !has('greenAmount')))
                   )
    }

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

...