Firestore安全规则:更新时request.resource.data。<prop>会发生什么?

时间:2018-02-26 19:03:24

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

我的团队最近对此进行了讨论,似乎无法确定实际/预期的行为:

如果您有以下安全规则:

match /categories/{document=**} {
    allow update: if request.auth.uid != null
    && request.resource.data.firstName is string
    && request.resource.data.lastName is string;
}

您可以使用以下数据从前端到/ categories /创建更新语句:

{
   firstName: 'A valid firstName'
}

安全规则是否应该通过或失败?

reference documentation中,它说

  

开发人员提供的数据显示在request.resource.data中   是包含字段和值的地图。未提供的字段   资源中存在的请求被添加到   request.resource.data

相关问题:

  1. 这是否意味着成功/失败取决于现有数据 节点?
  2. 如果有人尝试使用数据进行更新,会发生什么情况 在安全规则中指定,即{age: 28}
  3. 是什么? 推荐的验证更新数据的方法?
  4. 问题3包含更多详细信息(架构问题) 假设您有这样的模型:

    interface Category {
      firstName: string;
      lastName: string;
      age?: int;
      groupId?: string;
    }
    

    现在我们创建一个像这样的安全规则:

    match /categories/{document=**} {
        allow update: if request.auth.uid != null
        && request.resource.data.firstName is string
        && request.resource.data.lastName is string;
        && request.resource.data.age is int;
        && request.resource.data.groupId is string;
    }
    

    然后我们了解以下情况: enter image description here

    这些场景的

    非常适合可选属性。因为如果必须提供所有属性(如方案1中所示),那么它实际上不是可选属性。如果你不提供它们,就像在场景2中一样,那就失败了。

    也许我在这里遗漏了一些东西,关于如何使用写入firestore的可选属性来验证数据的基本指南?

    可选参数的安全规则,如下所示:

    match /categories/{document=**} {
       allow update: if request.auth.uid != null
       && request.resource.data.firstName is string
       && request.resource.data.lastName is string;
       && request.resource.data.age is int; // ignore if NOT provided
       && request.resource.data.groupId is string; // ignore if NOT provided
    }
    

0 个答案:

没有答案