Firestore安全规则

时间:2018-05-09 10:03:15

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

我使用的是Firebase,并为users提供了以下架构:

{
     "uid": "randomUID",
     "domain": "@domain1"
}

我有一个集合domains,其中包含所有用户域名,如下所示:

{
    "@domain1": {
                    "uid": "randomUID"
                }
}

我尝试使用Firestore安全规则,以防止创建与pr-existing具有相同域的新用户。这就是我到目前为止所做的:

service cloud.firestore {
    match /databases/{database}/documents {
        match /users/{Id} {
         allow read: if true;
         allow create: if exists(/databases/$(database)/documents/domains/$(resource.data.domain)) == false;
  }
}

但它不起作用。我还尝试了以下允许创建规则的组合,但没有一个工作:

if !exists(/databases/$(database)/documents/domains/$(resource.data.domain));

if !exists(/databases/$(database)/documents/domains/$(request.resource.data.domain));

有任何想法或建议吗?调试安全规则很棘手,因为还没有调试器。

1 个答案:

答案 0 :(得分:0)

首先,您必须先访问resource,然后才能访问request。然后,当您使用

if !exists(/databases/$(database)/documents/domains/$(request.resource.data.domain));

您尝试查找要创建的用户的域。到目前为止,它可能会起作用。但是您确定request.resource.data.domain的值绝对等于您创建的domain的路径吗?

因为如果您使用add(...)方法添加新域,则这些值将不相同。