Firestore安全规则违反了更新规则

时间:2018-08-01 12:46:34

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

我昨天对此发布了一个问题,但我正在创建一个包含更多详细信息的新问题。 Firestore .setData is blocked by update rule not create

我已经运行了模拟器,并且规则在那里工作。同样,当我创建文档并将快速代码中的setData更改为update时,代码也可以工作。它似乎仅在创建文档时失败。但是要注意的是,当我删除update规则或简单地将其更改为allow update: if false;时,setData(或被规则创建)将正确执行。我不知道发生了什么事,也不知道有什么工具可以用来获得更好的洞察力。

 match /users_real/{userID} {
    allow create: if true;
    allow read: if isOwner(userID);
    allow update: if (request.writeFields.size() == 1);

}

设置数据:

self.docRef.collection("users_real").document("adfadsf").setData(post) { (error) in

            if let error = error {
                print("He dead!: \(error.localizedDescription)")


            }
            else {
                print("it worked, for now")


            }
        }

1 个答案:

答案 0 :(得分:1)

Firebase支持确认存在与评估request.writeFields.size()有关的错误。没有估计何时修复。

可以通过以下规则证明该错误的存在:

service cloud.firestore {
  match /databases/{database}/documents {

    match /cities/{city} {
      // This should always evaluate to true, but does not.
      allow create: if (request.writeFields.size() == 1) || (request.writeFields.size() != 1);
      allow update: if true;
    }
  }
}

尽管create规则应始终评估为true,但是创建城市的尝试因权限被拒绝而失败。看来request.writeFields的问题不仅影响它出现的规则,而且还影响路径的其他规则。对于上述规则,尝试更新现有城市也将失败,并显示“权限被拒绝”。