公司的FireStore安全规则:文档
问题描述:
首先在阵列搜索用户的ID,对不起我的可怕的英语,这不是我的母语...公司的FireStore安全规则:文档
我建立在火力地堡一个简单的应用程序,使用该公司的FireStore数据库。在我的应用程序中,用户是小组的成员。他们可以访问其他用户的数据。 为了不查询太多文档(每个用户一个,在该组文档的子集合中),我选择将用户的数据添加到该组文档内的数组中。 这里是我组的文件:
{
"name":"fefefefe",
"days":[false,false,false,false,true],
"members":[
{"email":"[email protected]","id":"aaaaaaaa","name":"Mavireck"},
{"email":"[email protected]","id":"bbbbbbbb","name":"Mavireck2"},
],
}
我怎样才能与安全规则检查,如果用户是一组吗? 应该用对象吗? 我真的不希望为用户使用子集合,因为我会太快达到免费配额的限制...
谢谢你的时间!编辑: 感谢您的答案。我将其更改为一个对象: “成员”:{UID1:{},UID2:{}}
答
在一般情况下,你需要写像下面这样的规则:
service cloud.firestore {
match /databases/{database}/documents {
match /collection/{documentId} {
// works if `members` = [uid1, uid2, uid3]
// no way to iterate over a collection and check members
allow read: if request.auth.uid in resource.data.members;
// you could also have `members` = {uid1: {}, uid2: {}}
allow read: if resource.data.members[request.auth.uid] != null;
}
}
}
你可以还可以使用子集:
service cloud.firestore {
match /databases/{database}/documents {
// Allow a user to read a message if the user is in the room
match /rooms/{roomId} {
match /documents/{documentId} {
allow read: if exists(/databases/$(database)/documents/documents/$(documentId)/users/$(request.auth.uid));
}
match /users/{userId} {
// rules to allow users to operate on a document
}
}
}
}
谢谢你,但我不能得到它的工作...我敢肯定我的数据库是正确的:我组的文档中的对象“成员”,包含对象更多用户相关信息。 :'members = {uid1:{},uid2:{}}'。但是使用'allow read:if resource.data.members [request.auth.uid]!= null;'不起作用。我也尝试过'resource.data.members [request.auth.uid] .name!= null;',和'resource.data.members [(request.auth.uid)]!= null;' – Mavireck
我做了一个简单的本地测试:'if(doc.data()['members'] [(firebase.auth()currentUser.uid)]!= null){console.log(“not null)}'...它总是记录” NOT NULL“ – Mavireck
我不能编辑,所以这里是我的最终评论:'允许读:如果resource.data.membres [(request.auth.uid)]!= null;'不工作,而允许读:if resource.data.membres!= null;'做。 – Mavireck