我正在为 Firestore 安全规则苦苦挣扎。这是我的用户集合的结构,我还有其他集合的结构:机器、日志和照片。我想设置规则,只有当 request.auth.uid == user.user_UUID
时才能访问数据我认为我的规则中的语法一定不正确,因为根据我的以下内容,在使用我的应用程序登录后,我无法读取或写入任何数据。认为 user_UUID 周围的括号可能是问题我尝试将“匹配用户/{user_UUID}”更改为“匹配用户/user_UUID”,但这没有用。我也尝试删除 'match /{document=**} '
我的每个集合都有一个 user_UUID 字段,我希望保护安全性,以便只有相应的经过身份验证的用户才能访问该数据。
import Foundation
struct User: Codable {
var email: String?
var userUUID: String?
}
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
match /users/{user_UUID} {
allow read, update, delete: if request.auth != null && request.auth.uid == user_UUID;
allow create: if request.auth != null;
}
}
}
}
答案 0 :(得分:0)
我想我看到了我的问题。当我创建一个新的经过身份验证的用户时,在我的用户集合中,UUID 被捕获为一个字段,而用户本身的 documentID 正在获取它自己的标识符,我在用户中将其作为属性 userDocumentID 单独捕获。
let db = Firestore.firestore()
let usersRef = db.collection("users")
let newUser = usersRef.document()
let docID = newUser.documentID ///*** THIS MUST BE WHERE PROBLEM LIES
let userData = [
//"date": "",
"user_UUID": result!.user.uid,
"userDocumentID": docID,
"nameLast": lastName,
"nameFirst": firstName,
"email": email,
"unlimited": false,
"password": password] as [String : Any]
newUser.setData(userData)
self.user_UUID = result!.user.uid
}
答案 1 :(得分:0)
我一直在做更多的阅读,并想知道我的数据库结构是否天生错误。我有 4 个不同的集合,其中没有一个嵌套在另一个集合中。我使用每个键值将它们链接在一起。
所以我有 machine.user_UUID 将文档链接到正确的记录。
但我看到也许我应该有一个路径,例如 user/machines
这可能是我问题的根源吗?