我有一个基本的聊天应用程序,用户可以互相阻止。当用户A 阻止用户B 时,用户B 不再可以发送消息。
function isBlocked() {
return !get(/databases/$(database)/documents/user-blocks/$(request.resource.data.receiverId)).data.hasAny([request.auth.uid]);
}
因此,当用户B (经过身份验证的用户) 向用户A (接收方)发送一条消息,但不允许这样做。因为用户A 已阻止用户B 。
上面的代码不起作用。如何检查文档中是否存在用户B ID?
答案 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))
`