Firestore权限;检查用户是否在数组中



在Cloud Firestore中,我有一个文档集合,其中有一个数组字段,包含所有应该对该文档具有读取权限的用户。我简化的安全规则是:

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /collection_name/{document=**} {
allow read: if request.auth.uid in request.resource.data.listOfIds.toSet();
}
}
}

简化文档示例为:

{
listOfIds: ["uid1", "uid2"]
}

使用规则模拟器执行获取,读取工作如预期。然而,使用Android API执行类似的查询会返回拒绝权限错误。我认为我以与规则相同的方式约束我的查询(这是Firestore的要求;它不会过滤出用户无法为您阅读的文档(。

firestoreClient.collection("collection_name")
.whereArrayContains("listOfIds", firebaseUid)
.get()
.addOnCompleteListener(...);

事实证明,Firestore认为该查询没有正确地约束到定义的读取权限。是.toSet()导致了它的失败。删除导致了我预期的行为。

为什么我一开始就有.toSet()?我错误地认为,将数组转换为集合是使用in运算符的必要条件。该运算符既适用于列表,也适用于集合。

相关内容

最新更新