我目前正在编写一些安全规则来保护我的Firestore数据库,但遇到一些问题。我希望能够从查询参数中获取数据以放入规则中(我希望能够使用clientId
):
db.collection('Users').doc(userId).where('connections', 'array-contains', clientId).get();
我希望能够在我的Firestore安全规则中使用clientId
,以便我可以使用该客户端ID查询另一个集合,因为我不认为Firestore安全规则在get查询中提供了“ where”功能。这有可能吗?
像这样:
request.auth.uid in get(/databases/$(database)/documents/Users/$(clientId)).data.connections
感谢您的帮助。
答案 0 :(得分:0)
一段时间以来,我也一直在努力解决相同的问题,最终设法解决了这个问题:
数据库
/familyMembers/{familyMemberId}
{
parents
userId1
userId: "userId1"
userId2
userId: "userId2"
}
安全规则
match /familyMembers/{familyMemberId}/{document=**} {
allow read, write: if resource.data.parents[request.auth.uid] != null;
}
match /anotherCollection/{familyMemberId}/{document=**} {
allow read, write: if request.auth.uid in get(/databases/$(database)/documents/familyMembers/$(familyMemberId)).data.parents;
}
从Swift代码查询
db.collection("familyMembers").whereField("parents.\(userId).userId", isEqualTo: userId).getDocuments()