【问题标题】:Per field rules in Firestore Security RulesFirestore 安全规则中的每个字段规则
【发布时间】:2020-02-13 20:15:06
【问题描述】:

我有一堆文档,每个文档都包含几个字段。如何编写仅适用于每个文档中特定字段的规则?

例如,如果我的文档如下所示:

{
  "displayName": "John Doe", // read and write
  "accessLevel": 3 // read only
}

我怎样才能做到让你可以

  • 读取显示名称和访问级别
  • 写入显示名称
  • 不写入访问级别

我浏览了很多视频和 Firestore 文档,但没有找到任何可以说明您将如何运用此按字段控制的内容。

【问题讨论】:

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


    【解决方案1】:

    您正在寻找的是使字段不可修改。你可以通过检查你的规则来做到这一点,该字段的值在请求之后与之前相同。

    我的规则中有一个简单的辅助函数:

    function isUnmodified(key) {
      return request.resource.data[key] == resource.data[key]
    }
    

    然后我从我的write(或createupdate)规则中调用此函数:

      allow update: if isAdmin() || isUnmodified('name');
    

    所以在我上面的示例中,任何管理员(由我的isAdmin 函数确定)都可以修改名称字段,但其他用户不能。

    【讨论】:

    • 这是一种检查更改的聪明方法,我没有考虑过。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2021-11-01
    • 2019-06-17
    相关资源
    最近更新 更多