我昨天对此发布了一个问题,但我正在创建一个包含更多详细信息的新问题。 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")
}
}
答案 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
的问题不仅影响它出现的规则,而且还影响路径的其他规则。对于上述规则,尝试更新现有城市也将失败,并显示“权限被拒绝”。