firebase - 如何在不知道键的情况下强制执行 Firestore 规则中映射中的值?

标签 firebase firebase-security google-cloud-firestore

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

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

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

很明显,我必须将值保留在 users 内 map 与modified同步 field 。由于我不想在文档更新时支付云函数调用和文档写入,因此我计划在客户端进行更新,同时更新文档本身。

问题是,如何使用 Firestore 安全规则强制执行 users 的值?映射以便它始终与修改后的字段同步?这个 map 的键是事先不知道的,这个 map 的大小也可以是可变的。

最佳答案

您可以使用 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();

关于firebase - 如何在不知道键的情况下强制执行 Firestore 规则中映射中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48051692/

相关文章:

javascript - 我怎么知道 Firebase 查询何时结束

firebase - Flutter:我们如何在桌面应用程序中使用 Firebase 数据库

node.js - 使用 node.js 登录 Firebase-Admin

javascript - Firebase 9 - 如何进行新文档引用

swift - 按时间顺序快速排序 Firebase 帖子

swift - 是否可以在 Firebase 中为 child 添加密码?

firebase - 如何使用 Firestore 的安全规则验证数组值?

firebase - Verax 在 Firebase 安全规则中意味着什么?

javascript - 获取 Firestore 子集合的最佳方式

google-cloud-firestore - Firestore 规则 : What if a give document doesn't exist but is used in a get?