Firebase Firestore安全规则-如何使用变量作为字段名?

Firebase Firestore安全规则-如何使用变量作为字段名?,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,如果我在/recordTypeX/{autoKey}处保存了一个文档,其结构如下: memberUserIds [object] hjfjkh32390u09j: true kjsklfjkslfklj3: true .... skfksdjk2249fks: true someStringField: "Bork, bork, bork!" someNumericField: 88 如何编写安全规则来检查其中一个MemberUserID的存在?我尝试了以下方法,但CLI不喜欢

如果我在
/recordTypeX/{autoKey}
处保存了一个文档,其结构如下:

memberUserIds [object]
  hjfjkh32390u09j: true
  kjsklfjkslfklj3: true
  ....
  skfksdjk2249fks: true
someStringField: "Bork, bork, bork!"
someNumericField: 88
如何编写安全规则来检查其中一个MemberUserID的存在?我尝试了以下方法,但CLI不喜欢这种语法

如果resource.data.memberUserIds.$(request.auth.uid)=true,则允许读取

我知道变量可以在带有
get()
exists()
的路径中使用,所以我认为使用变量寻址字段也是可能的,但我无法克服语法错误。这可能吗

在某些背景下,我试图在集合中的每个文档上维护一个(小)用户ID列表,这样我就可以进行查询,从而检索集合中当前用户所属的所有文档

我在阅读了名为“使用列表、集合和阵列”的指南后采用了这种方法,该指南过去在Firebase文档中可用,但似乎已被删除


谢谢你的建议。

这里是我的一个火力基础规则的示例

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();

谢谢你,菲利普。这正是我需要的。您的解决方案是有效的,尽管我现在看到,如果需要一个复合索引,这种方法的实用性将受到限制。我可能会调整我的模型。如果其他人在这里提出了类似的问题,请务必查看: