我正在玩Firebase,并且正在使用他们的身份验证框架以及Firestore数据库。
我的数据库模型非常简单:我想保留一个“用户”集合,该集合将为每个注册用户保存一个文档,该文档由用户的uid标识。该用户文档将包含代表用户费用的文档集合。 在their documentation之后,我在firebase控制台中设置了规则,如下所示:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId=**} {
allow read,update,delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
在我的iOS应用中,当用户登录时,我想使用以下代码检索用户的费用:
func retrieveUserExpenses() {
guard let dbRef = userExpensesDbRef() else {
print("Attempting to retrieve expense for unlogged user")
return
}
dbRef.getDocuments { [unowned self] (snapshot,err) in
if let err = err {
print("Error retrieving expenses \(err)")
} else {
print("Retrieved expenses!")
snapshot?.documents.forEach {
if let expense = self.createExpenseFromDocument($0) {
self.expenses.append(expense)
}
}
self.loadedExpenses = true
}
}
}
private func userExpensesDbRef() -> CollectionReference? {
guard let loggedInUser = AuthHandler.shared.loggedInUser() else {
return nil
}
return db.collection("users").document(loggedInUser.uid).collection("expenses")
}
问题是对getDocuments的调用将显示错误行:
错误检索费用错误域= FIRFirestoreErrorDomain代码= 7 “缺少权限或权限不足。”
我已经通过打印检查了以下内容: loggedInUser.uid 与我在Firebase控制台的“用户”标签中“身份验证”部分看到的相同。
对于我无法安全检索数据的任何指导或提示,我们将不胜感激。