【问题标题】:How to detect if field exists in a Firestore document in security rules如何在安全规则中检测 Firestore 文档中是否存在字段
【发布时间】:2019-02-19 10:02:08
【问题描述】:

我有这些 Firestore 安全规则。我需要检查三个金额“redAmount”、“greenAmount”和“blackAmount”加在一起是否超过了用户的余额。如果是这样,更新应该被拒绝。

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

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

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

【问题讨论】:

  • 看来in 运算符最适合这种情况。见stackoverflow.com/questions/53458413/… 类似(redAmount in futureDocument() ? futureDocument().redAmount : 0)
  • 第 16 行:意外的“futureDocument”。 @FrankvanPuffelen 我认为没有 ?如果没有“if”运算符,则为运算符。我查看了所有文档。我以前一直在使用“in”运算符,但您必须将其与 if 结合使用。
  • 能否请您不要将问题标记为重复? @弗兰克
  • Hmmm.... 在这种情况下,如果没有每个文档中的金额的默认值,我不确定用例是否可行(例如:"redAmount": 0)。
  • 是的,最后我也这样做了。 @FrankvanPuffelen

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


【解决方案1】:

用一个非常疯狂的长期解决方法解决了这个问题(而不是使用函数,使用 or's)

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

我最终没有使用它,只是使用云功能创建文档,并且没有授予用户删除它的权限。

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 2019-08-26
    • 1970-01-01
    • 2020-06-29
    • 2020-09-09
    • 2019-01-31
    • 2020-06-19
    • 2018-06-18
    相关资源
    最近更新 更多