如何检查是否只有一个特定字段使用Firestore规则进行更新?

时间:2018-05-29 16:06:18

标签: google-cloud-firestore firebase-security-rules

申请方,我有这个代码:

enter image description here

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()始终使用之前的应用程序代码返回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?

1 个答案:

答案 0 :(得分:1)

要检查要更新的字段,请使用request.writeFields。在你的情况下,这应该是:

"helper_completed" in request.writeFields && request.writeFields.size() == 1