【问题标题】:truthiness in firestore security rulesFirestore安全规则的真实性
【发布时间】:2020-11-03 05:59:57
【问题描述】:

在以下示例中,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;

}

上面的条件 1 代码有效,但是当我将 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 Security Rules: request.time "undefined on object"。我仍然很乐意找到或阅读有关 Firestore 安全规则中的真实性如何运作的说明。

【问题讨论】:

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


    【解决方案1】:

    安全规则语言不应用与 JavaScript 相同的真实性规则。如果一个 express 需要一个布尔值,你需要在那里提供一个实际的布尔表达式,否则它会被有效地评估为错误。此错误将向上传播表达式评估,直到它最终拒绝该规则。

    (有趣的事实:“错误”实际上是布尔类型的第三种状态 - 它不仅仅是真/假。这在任何地方都没有记录,因为它只会使您的典型开发人员的事情变得复杂。更容易想到任何错误就像直接拒绝规则而不必考虑究竟是如何发生的。)

    【讨论】:

      猜你喜欢
      • 2018-10-19
      • 2019-07-05
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多