Сторона приложения, у меня есть этот код:
static func markTaskAsCompleted(field: String, task: Task) -> Promise<Bool> {
return Promise<Bool> { seal in
FirestoreHandler.shared.db.collection("tasks").document(task.id!).updateData([
"\(field)": true
], completion: { (err) in
seal.resolve(err != nil ? false : true, err)
})
}
}
Я обновляю одно поле, helper_completed
в этом случае.Вот правила безопасности:
match /tasks/{task_id} {
...
allow update: if (...) || isValidTaskUpdate();
...
}
function isValidTaskUpdate() {
return currentUser().uid == existingData().assigned.user_id &&
incomingData().keys().size() == 1 &&
'helper_completed' in incomingData();
}
function incomingData() {
return request.resource.data;
}
Последняя проверка 'helper_completed' in incomingData()
всегда возвращает ложь с предыдущим кодом приложения.
Я также пытался:
'helper_completed' in incomingData().keys();
incomingData().hasAny('helper_completed');
Итак, как я могу проверить, обновлено ли только одно конкретное поле в моем запросе на обновление?
Я уже проверил: Правила безопасности Firestore - Как я могу проверить, что поле не используется?модифицирована?