如何在不了解密钥的情况下在Firestore规则中强制执行映射中的值?

Rat*_*met 5 firebase firebase-security google-cloud-firestore

我正在尝试在Firestore的文档中实现类似于"使用数组,列表和集合"的示例,但是对于用户访问控制列表.

在文档中,将有一个modified时间戳users字段和一个映射字段,其中包含用户的UID作为键,修改后的时间戳作为值(以便我可以使用此字段进行排序).

{
    modified: 2018-01-01T17:05:00Z,
    users: {
        someUID: 2018-01-01T17:05:00Z,
        otherUID: 2018-01-01T17:05:00Z
        /* ... */
    }
}
Run Code Online (Sandbox Code Playgroud)

很明显,我必须保持usersmap中的值与modified字段同步.因为我不想在文档更新时支付云函数调用和文档写入,所以我计划在客户端上进行更新,同时更新文档本身.

问题是,如何使用Firestore安全规则强制执行usersmap 的值,以便它始终与修改后的字段同步?此地图的关键字事先未知,此地图的大小也可以变化.

Jay*_*ani 2

如果更新时变量或密钥未知,您可以使用writeFields更新规则。map

allow update: if request.auth != null
     && request.resource.data.users is map
     && request.writeFields.size() == 1
     && (('users.' + request.auth.uid) in request.writeFields)
     && request.resource.data.users[request.auth.uid] <= request.time.time();
Run Code Online (Sandbox Code Playgroud)