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

标签 google-cloud-firestore firebase-security

应用程序端,我有这个代码:

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;
}

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/

相关文章:

swift - Firebase Firestore 弄乱了数组的顺序

android - 使用 firestore 时找不到满足版本约束的 'com.google.code.gson:gson' 版本

reactjs - 在 React 应用程序中保护 Firebase API key 使其无法公开访问的最佳方法是什么?

swift - Firestore 安全规则违反更新规则

firebase - 没有为 '[]' 类型定义运算符 'Object'

java - 如何在 Firebase Android 中获取所有 Activity 的实时监听器

javascript - 使用规则和身份验证将云 Firestore 数据库私有(private)化

javascript - firestore规则匹配父数据,仅在模拟器中工作

firebase - 如何在同一个Firebase应用程序中为两种类型的用户分别处理登录?

python - 通过规则授予计算机对实时数据库的唯一访问权限 (Pyrebase)