【问题标题】:Firestore security rules get(). exists()Firestore 安全规则 get()。存在()
【发布时间】:2020-08-22 02:51:29
【问题描述】:

我在 Firestore 中有如下文件:

BID: "123"
From: "xxx"
Opn: true

在创建文档之前,我需要检查是否有另一个文档具有 BID == "123"Opn == true,因为不可能再有一个具有相同 BID 的 Opn 为 true 的文档。

我尝试使用 get()exists,但它不适用于 2 个数据字段。

我尝试了什么:

function checkIfThereOpenRoomForSameBBB(xxx) { 
  return !(
    (get(/databases/$(database)/ChatRooms/$(ChatRoom)).data.BID == xxx) &&
    (get(/databases/$(database)/ChatRooms/$(ChatRoom)).data.Opn == true)
  ); 
}

这种情况有什么解决办法吗?

【问题讨论】:

  • 我用过类似的东西:
  • function checkIfThereOpenRoomForSameBBB(xxx) { return !((get(/databases/$(database)/ChatRooms/$(ChatRoom)).data.BID == xxx) && (get(/databases/ $(数据库)/ChatRooms/$(ChatRoom)).data.Opn == true)); }

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


【解决方案1】:

安全规则无法搜索数据库中的数据,因为这会非常缓慢且成本高昂。他们所能做的就是检查文档是否存在于特定路径中,或者将文档作为特定路径读取并检查其内容。

这意味着,任何时候您想检查某物是否存在,您都需要确保它存在于已知路径中。因此,如果BIDOpn=tru 的组合必须是唯一的,您应该创建一个集合,其中每个文档的键由BID 值和Opn=true 组成。

如果这是您应用的全局要求,您甚至可以在现有集合中使用此密钥,而不是您当前使用的(可能是自动生成的)密钥。

另见:

【讨论】:

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