如果我的文档保存在/recordTypeX/{autoKey}
中,结构如下:
memberUserIds [object]
hjfjkh32390u09j: true
kjsklfjkslfklj3: true
....
skfksdjk2249fks: true
someStringField: "Bork, bork, bork!"
someNumericField: 88
如何编写安全规则来检查是否存在memberUserIds?我尝试了以下操作,但是CLI不喜欢该语法。
allow read if resource.data.memberUserIds.$(request.auth.uid) == true;
我知道变量可以在get()
和exists()
的路径中使用,因此我认为也可以使用变量寻址字段,但是我无法克服语法错误。这可能吗?
在某些背景下,我试图在集合中的每个文档上维护一个(小的)userId列表,以便我可以执行一些查询,以使我可以检索集合中当前用户是其成员的所有文档。的。
我在查看了名为使用列表,集合和数组的指南后采用了这种方法,该指南过去在Firebase文档中可用,但似乎已被删除。
感谢您的任何想法。
答案 0 :(得分:5)
这是我的基本火力规则之一。
function containsResourceOwnerId() {
// /database/{database}/documents/example/{exampleId}
// exampleDocument => { abc123: true }, request.auth.uid = abc123
return resource.data[request.auth.uid] == true;
}
您应该可以使用以下内容
function isMemberOf() {
return resource.data.memberUserIds[request.auth.uid] == true;
}
在需要的地方使用规则。
match /teams/{teamsId} {
allow read: if isMemberOf();