公司的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 
     } 
    } 
    } 
} 
+0

谢谢你,但我不能得到它的工作...我敢肯定我的数据库是正确的:我组的文档中的对象“成员”,包含对象更多用户相关信息。 :'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

+0

我做了一个简单的本地测试:'if(doc.data()['members'] [(firebase.auth()currentUser.uid)]!= null){console.log(“not null)}'...它总是记录” NOT NULL“ – Mavireck

+0

我不能编辑,所以这里是我的最终评论:'允许读:如果resource.data.membres [(request.auth.uid)]!= null;'不工作,而允许读:if resource.data.membres!= null;'做。 – Mavireck