【问题标题】:Firestore security rules: How to validate that a field is undefined?Firestore 安全规则:如何验证字段是否未定义?
【发布时间】:2019-04-26 18:11:54
【问题描述】:

当用户注册并在 Firestore 中初始化他们的数据时,我想验证他们没有尝试设置他们的角色(例如,他们没有将其设置为“管理员”)。

我试着写这个:

match /users/{userId} {
  allow create: if (signedInAs(userId) && !request.resource.data.role) || isAdmin();
  ...

...但我只看到“对象上的属性角色未定义。”

有没有办法安全地做到这一点?或者这是否意味着我应该始终初始化预期的字段,即使它只是空字符串?这似乎不太符合 NoSQL 的哲学?

【问题讨论】:

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


    【解决方案1】:

    使用in 运算符来查明对象的属性是否不存在。

    !("role" in request.resource.data)
    

    这会产生一个布尔值。请参阅 Map 类型的规则 API 文档。

    【讨论】:

    • 它只在我获取单个文档时有效,但在我获取集合时无效:/
    • @DariuszBacinski 获取集合是什么意思?为此,您将拥有“存在”(对于该集合下存在的文档)。我看不到您的评论与问题或答案的相关性。教育我。
    【解决方案2】:

    如果其他解决方案不起作用,请尝试writeFields

    !("role" in request.writeFields)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2021-07-07
      • 1970-01-01
      相关资源
      最近更新 更多