【问题标题】:Firestore security rules: do undefined object properties matter?Firestore 安全规则:未定义的对象属性重要吗?
【发布时间】:2019-10-01 11:16:40
【问题描述】:

我想知道关于具有 Firestore 安全规则的未定义属性的约定是什么。

例如在以下检查自定义声明的规则中:

allow read: if request.auth.token.claims.admin;

未定义属性错误有很多点,到目前为止,最有可能的是如果用户未通过身份验证,则request.auth 将未定义,因此request.auth.token.claims.admin 将尝试访问未定义值的属性。

我注意到在文档中request.auth.uid 是一个常见的检查,他们不检查是否首先定义了request.auth。但是,在我的研究中,我注意到有些人确实会检查类似的查询,例如 in this stack overflow answer

下面是模拟器返回的带注释的屏幕截图。我的理解是,这种对未定义属性的检查对于安全性来说不是必需的。我的问题是标准是什么,如果不检查未定义的属性是标准,那么为什么模拟器会抛出错误?

附带说明以下哪个(隐式或显式布尔条件)是首选以及原因:

allow read: if request.auth.token.claims.admin;

allow read: if request.auth.token.claims.admin == true;

【问题讨论】:

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


    【解决方案1】:

    首先:规则评估中的所有错误都会导致错误。没有任何条件的错误会导致访问被拒绝。因此,如果您尝试访问 null 或未定义对象的属性,则会出现错误(因为该属性不存在),并导致立即拒绝访问。

    如果您想在规则中明确检查 null,那很好。这可能有助于这些规则的可读性。但是您没有义务这样做,因为访问会立即被拒绝。这完全取决于您。

    【讨论】:

    • 感谢您的回复。旁注呢……最好为布尔值包含“== true”RHS?
    • 几乎任何语言的布尔值都不需要 == 比较。但是任何对你来说更具可读性的东西。
    • 谢谢,确定一下。规则是我不想搞砸的一件事:)
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2020-10-07
    • 2019-02-16
    • 2021-12-02
    • 2018-07-23
    • 1970-01-01
    • 2021-02-20
    • 2020-11-03
    相关资源
    最近更新 更多