Firestore安全规则:获取要在安全规则中使用的参数

时间:2020-03-26 14:22:03

标签: firebase google-cloud-firestore firebase-authentication firebase-security

我目前正在编写一些安全规则来保护我的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

感谢您的帮助。

1 个答案:

答案 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()

参考:https://groups.google.com/forum/#!searchin/firebase-talk/jannica%7Csort:date/firebase-talk/1rTmJmNyJNQ/x2P8vPdqAQAJ