Я пытаюсь выполнить следующую запись -
guard let userid = Auth.auth().currentUser?.uid else {fatalError()}
let firstName = "firstName"
let lastName = "lastName"
let userName = "userName"
let uid = userid
let userInfo = [firstName:firstNameTextField.text!,
lastName:lastNameTextField.text!,
userName:userNameTextField.text!,
uid:userid]
Firestore.firestore().collection("users").document(userid).setData(userInfo) { (error) in
if error != nil {
print(error?.localizedDescription)
} else {
self.performSegue(withIdentifier: "goToFeed", sender: self)
}
}
Это мои правила безопасности -
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
}
match /users/{userid} {
allow read: if request.auth.uid != null;
allow create: if request.resource.data.uid == request.auth.uid;
}
}
}
Эта запись запрещена при выполнении с помощью симулятора XCode с ошибкой -«Отсутствует или недостаточно разрешений.»
Однако, когда я пытаюсь построить тот же документ на имитаторе правил Firestore, это разрешается.
Кроме того, я также пытался изменить это правило к этому
match /users/{userid} {
allow create: if request.resource.data.uid == request.auth.uid &&
userid == request.auth.uid
}
В вышеприведенном случае это отклоняется как симулятором Xcode, так и симулятором Firestore.
Что я делаю не так?
Несколько уточнений -
Запись происходит идеально, если правила изменены, чтобы сделать ее открытой базой данных.
Структура документов выглядит следующим образом -
let userInfo = [firstName:firstNameTextField.text!,
lastName:lastNameTextField.text!,
userName:userNameTextField.text!,
uid:userid]