应用程序端,我有这个代码:
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;
}
incomingData() 中的最后一次检查'helper_completed'
始终使用之前的应用程序代码返回 false。
我也尝试过:
'helper_completed' in incomingData().keys();
incomingData().hasAny('helper_completed');
那么,如何检查我的更新请求中是否仅更新了一个特定字段?
我已经检查过: Firestore Security Rules - How can I check that a field is/isn't being modified?
最佳答案
要检查哪些字段正在更新,请使用 request.writeFields
。在你的情况下,这应该是:
"helper_completed" in request.writeFields && request.writeFields.size() == 1
关于google-cloud-firestore - 如何检查是否只有一个特定字段使用 Firestore 规则进行了更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50588621/