如何在安全规则中检测Firestore文档中是否存在字段

时间:2019-02-19 10:02:09

标签: firebase google-cloud-firestore firebase-security-rules

我有这些Firestore安全规则。我需要检查添加的3个数量“ redAmount”,“ greenAmount”和“ blackAmount”是否超过了用户的余额。如果是这样,则应拒绝更新。

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

但是,如果其中一个数量未定义=>未设置,则此功能将失败,我想将其设置为0,但不能。有关如何解决此问题的任何想法?

无法通过参考“如何验证字段未定义”问题来解决此问题。

1 个答案:

答案 0 :(得分:1)

通过非常疯狂的长期解决方法(而不是使用函数,use或')来解决此问题

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')))
                   )
    }

我最终不使用它,而只是使用云功能创建文档,而没有赋予用户删除它的权利。