如何检查文档中是否存在ID?

时间:2019-04-18 15:04:48

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

我有一个基本的聊天应用程序,用户可以互相阻止。当用户A 阻止用户B 时,用户B 不再可以发送消息。

块结构

user-blocks collection

安全规则(对话)

function isBlocked() {
  return !get(/databases/$(database)/documents/user-blocks/$(request.resource.data.receiverId)).data.hasAny([request.auth.uid]);
}

因此,当用户B (经过身份验证的用户) 向用户A (接收方)发送一条消息,但不允许这样做。因为用户A 已阻止用户B

问题

上面的代码不起作用。如何检查文档中是否存在用户B ID?

1 个答案:

答案 0 :(得分:0)

有任何文档记录在List上。看起来您想从每个块的字段移动到具有ID列表的单个块。例如。 / user-blocks /处的文档将具有block = [sender-id1,sender-id2],则您的规则应类似于return !get(/databases/$(database)/documents/user-blocks/$(request.resource.data.receiverId)).data.blocks.hasAny([request.auth.uid]);

您也可以尝试在Map上使用in运算符,例如return !(request.auth.uid in get(/databases/$(database)/documents/user-blocks/$(request.resource.data.receiverId)).data)

要将其与一个existing调用结合使用,您将需要以下内容: `

if (!exists(/databases/$(database)/documents/user-blocks/$(request.resource.data.receiverId)
     or !(request.auth.uid in get(/databases/$(database)/documents/user-blocks/$(request.resource.data.receiverId)).data))

`