【问题标题】:Firestore rules are not filter - one more clarificationFirestore 规则不是过滤器 - 进一步澄清
【发布时间】:2021-03-25 14:27:45
【问题描述】:

我需要澄清一下臭名昭著的"Rules are not filter"

想象一下

  • 一个集合testcol,其中的文档都有一个字段test,值为1
  • 此集合的规则allow list: if resource.data.test == 1
  • 从该集合中提取所有文档的查询:firebase.collection(testcol).get()

因此,即使查询没有在字段test 上明确指定过滤器,所有返回的文档仍然通过规则。

我现在正在对此进行测试,但我发现我仍然收到“权限缺失或权限不足”错误!那么,规则引擎是否不仅会根据规则检查访问的文档,还会检查查询本身以查看理论上是否可能返回与规则不匹配的文档,而不管文档本身如何?

【问题讨论】:

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


    【解决方案1】:

    Firestore 不会主动检查每个现有文档以查看其是否符合条件。那永远不会扩展。

    它会检查读取操作是否保证永远只返回允许的文档,而不管实际的基础数据如何。如果它不能保证,读取将被拒绝,因为它是在这里。

    【讨论】:

    • 现在有些东西我不明白:它如何“检查读取操作是否保证只返回允许的文档”?在某些情况下,如果不实际检查每个返回的文档,这在一般情况下可能是不可能的
    • 你能举一个这样的例子吗?
    • 'allow list: if complexfunction(resource.data)' with complexfunction 检查文档字段上的所有内容,甚至可能通过 get 和 exists 函数检查一些相关文档
    • 我建议尝试使用特定规则,但逻辑是规则引擎只允许它可以保证满足条件的操作。这很聪明。 ,但如果不能满足此保证,它将拒绝该操作。
    • 我将发布一个带有清晰示例的新问题
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多