Firestore 安全规则和 Swift

时间:2021-01-07 01:14:50

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

我正在为 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;
  
    }
  }
}
}

2 个答案:

答案 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

这可能是我问题的根源吗?

相关问题