如何创建允许doc成员编写该doc的Firebase安全规则

时间:2017-10-30 18:51:06

标签: javascript firebase firebase-security

我的firebase数据库包含系列。这些家庭有parents和其他属性,如地址等。我希望允许父母写入他们的家庭文件访问权限,并拥有对其他家庭的只读访问权限。如何使用安全规则语法表达这一点?

假设数据如下:

families (collection)
    "TheSmiths" (doc) {
        parents: [{ firstname: "John", role:"dad", userId:"xxxx" },
                  { firstname: "Joan", role:"mom", userId:"yyyy" } ],
        address: "123 Oak Lane"
    }
    "TheJoneses" (doc) etc.

到目前为止,我对规则的最佳看法是这样的:

service cloud.firestore {
  match /databases/{database}/documents {
    // any user can read the families
    match /families/{anyDocument} {
      allow read: if request.auth != null;
    }
    // here's my problem
    match /families/{anyDocument} {
      allow read, write: if resource.data.parents.userId == request.auth.uid;
    }
  }
}

第二条规则是试图说,如果用户的id存储在其中一个父母中,则允许读写家庭文档。我遇到的问题是""之一的语法。父母。也许我可以说:

if ((resource.data.parents[0].userId == request.auth.uid) ||
    (resource.data.parents[1].userId == request.auth.uid))
我可以吗?即使我可以,数据可能包含多于或少于两个成年人,他们可以被视为父母进行编辑。我甚至关闭了吗?

1 个答案:

答案 0 :(得分:0)

查看Firebase docs

你可以尝试这样的事情

match /families/{anyDocument} {
  allow read: if request.auth != null;
  allow write: if resource.data.parents.userId in [(request.auth.uid)];
}

如果您在parents/userId地图路径中列出,则表示允许读取您的身份验证并写入。

我没有检查过自己,希望这会有所帮助。