【问题标题】:Firestore Security RulesFirestore 安全规则
【发布时间】:2018-10-19 09:49:45
【问题描述】:

我正在使用 Firebase,并且 users 具有以下架构:

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

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

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

我正在尝试使用 Firestore 安全规则,以防止创建与现有用户具有相同域的新用户。这是我目前所拥有的:

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));

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    因为如果您使用add(...) 方法添加新域,那么这些值将不一样。

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多