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

Hon*_*Guy 2 firebase google-cloud-firestore firebase-security-rules

如果我的文档保存在/recordTypeX/{autoKey},结构如下:

memberUserIds [object]
  hjfjkh32390u09j: true
  kjsklfjkslfklj3: true
  ....
  skfksdjk2249fks: true
someStringField: "Bork, bork, bork!"
someNumericField: 88
Run Code Online (Sandbox Code Playgroud)

如何编写安全规则以检查是否存在memberUserIds?我尝试了以下操作,但是CLI不喜欢该语法。

allow read if resource.data.memberUserIds.$(request.auth.uid) == true;

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

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

我在阅读了Firebase文档中曾经使用过的指南(称为列表,集合和数组)后,采用了这种方法。

感谢您的任何想法。

Phi*_*lip 5

这是我的基本火力规则之一的示例。

function containsResourceOwnerId() {
    // /database/{database}/documents/example/{exampleId}
    // exampleDocument => { abc123: true }, request.auth.uid = abc123
    return resource.data[request.auth.uid] == true;
}
Run Code Online (Sandbox Code Playgroud)

您应该可以使用以下内容

function isMemberOf() {
    return resource.data.memberUserIds[request.auth.uid] == true;
}
Run Code Online (Sandbox Code Playgroud)

并在需要的地方使用规则。

match /teams/{teamsId} {
    allow read: if isMemberOf();
Run Code Online (Sandbox Code Playgroud)