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

时间:2018-01-01 17:19:52

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

我尝试实现与"Working with Arrays, Lists, and Sets" example in Firestore's document,类似的功能,但用于用户访问控制列表。

在文档中,时间戳的modified字段和地图的users字段,包含用户的UID作为键和修改后的时间戳作为值(以便我可以使用此字段进行排序)。

{
    modified: 2018-01-01T17:05:00Z,
    users: {
        someUID: 2018-01-01T17:05:00Z,
        otherUID: 2018-01-01T17:05:00Z
        /* ... */
    }
}

很明显,我必须将users地图中的值与modified字段保持同步。由于我不想在文档更新时支付云函数调用和文档写入,因此我计划在客户端上进行更新,同时更新文档本身。

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

1 个答案:

答案 0 :(得分:2)

如果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(); 作为更新规则。

new Vue({})