Firestore auth规则在列表中测试参考值



我正在尝试创建一个Firestore auth规则,该规则将当前用户与团队文档中的团队成员列表进行检查。成员被存储为文档参考,所以我一直在尝试这样的事情:

match /teams/{document=**} {
    allow read: if path("/users/" + request.auth.uid) in resource.data.members;
}

但是,当我尝试访问团队文档时,我会被告知有一个验证失败。

每个团队成员在/users中使用UID作为钥匙都有自己的文档。因此,用户可能是/users/12345678,并且团队文档可能具有:

/teams/team1 {
              members: [/users/12345678, ....]
             }

成员是参考类型。

到目前为止

有什么建议?

安全规则确实具有参考的概念,并且表示为路径类型对象。当通过安全规则读取文档参考时,您必须像对待路径一样对待它。这条路将完全有资格:

/databases/$(database)/documents/collection/documentId

$(数据库(来自您通常的顶级数据库通配符匹配。

因此,您的规则可能会这样实施:

match /teams/{document=**} {
    allow read: if /databases/$(database)/documents/collection/users/$(request.auth.uid) in resource.data.members;
}

请注意,在安全规则中,您可以通过/开始构建路径,然后使用$(foo(将变量作为路径组件进行插值。

最新更新