Я пытаюсь настроить правила безопасности Cloud Firestore, чтобы доступ к документу предоставлялся только пользователю, идентификатор которого совпадает с идентификатором документа. Аутентификация Firebase используется для аутентификации пользователя и присвоения имени документу идентификатора пользователя c ID. Документы хранятся в коллекции «Пользователи».
Вот мои правила:
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;
}
}
}
Вот код, который делает запрос к базе данных:
func loadData () {
//For Database
let userID = Auth.auth().currentUser?.uid
let db = Firestore.firestore()
db.collection("Users/\(userID!)/Info").document("Info").getDocument { (document, error) in
if error == nil {
//No error, check that document exists
if document != nil && document!.exists {
//Load the user data to the view controller
} else {
//Show the error which has occured
print("Document does not exist")
}
} else {
//Show the error which has occured
print("Error loading user data")
}
}
}
Я изо всех сил пытаюсь понять проблему, поскольку другие потоки, на которые я смотрел, которые содержат точно такой же код, не работают. Имитатор Firebase выдает ошибку: «Имитация чтения запрещена» с «Доступ запрещен для этого совпадения». В Xcode я получаю сообщение об ошибке: «[Firebase / Firestore] [I-FST000001] Прослушивать запрос в Users / DB9wtqM9h0OO1paMjNWAdsF4EgX2 не удалось: отсутствуют или недостаточно разрешений». Жесткое кодирование UID работает, поэтому я предполагаю, что это как-то связано с путем к файлу.
Пожалуйста, помогите, спасибо!