Как проверить, есть ли только одно конкретное поле, которое обновляется правилами Firestore? - PullRequest
0 голосов
/ 29 мая 2018

Сторона приложения, у меня есть этот код:

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() всегда возвращает ложь с предыдущим кодом приложения.

Я также пытался:

 'helper_completed' in incomingData().keys();
  incomingData().hasAny('helper_completed');

Итак, как я могу проверить, обновлено ли только одно конкретное поле в моем запросе на обновление?

Я уже проверил: Правила безопасности Firestore - Как я могу проверить, что поле не используется?модифицирована?

1 Ответ

0 голосов
/ 29 мая 2018

Чтобы проверить, какие поля обновляются, используйте request.writeFields.В вашем случае это должно быть:

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