读取数据时遇到一些问题。我可以根据我的安全规则写得很好。请参阅下面的swiftui代码查询和我的安全规则。对于上下文,我有一个users
集合和一个routines
集合。每个常规文档都有一个绑定到用户的uid。谁知道为什么我在这里可能无法正确阅读(这影响了我随后的写作能力?
安全规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
match /routines/{routine} {
allow write: if request.auth != null && request.auth.uid == request.resource.data.uid;
allow read: if request.auth != null && resource.data.uid == resource.data.uid;
}
}
}
快速查询代码
func updateRoutine() {
db.collection("routines").whereField("name", isEqualTo: "temp routine").getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
self.db.collection("users").document(self.currUser?.uid ?? "").updateData(["routinePreference": document.documentID])
self.db.collection("routines").document(document.documentID).updateData(["name": "another temp routine"])
return
}
}
}
}
编辑 这是我得到的错误:
获取文档时出错:错误域= FIRFirestoreErrorDomain代码= 7 “缺少权限或权限不足。” UserInfo = {NSLocalizedDescription =缺少权限或不足的权限。} 2020-07-03 01:43:24.440221-0400 TestRulesApp [58965:7804974] 6.26.0- [Firebase / Firestore] [I-FST000001]在例程失败时侦听查询: 权限不足或不足。
答案 0 :(得分:1)
您要在此处更新数据。使用的技术是传入字段值等于现有字段值。因此,您应该拥有更新规则allow update:if request.resource.data.uid == resource.data.uid;