Firebase上特定字段的规则

时间:2020-07-04 15:34:14

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

我想检查我的数据是否不包含特定字段。

 allow write,update: if (request.resource.data.brand.userID ==  request.auth.uid) &&
           !(plan in request.resource.data.brand.userData) && !(brand in request.resource.data.brand);

最后两个语句给出错误,指出planbrand是未知的。

我的文档是这样的:

{

brand: {
  brand:xxxx
  ..
   userData:{
       paid:{}
   }

}

我想确保没有人可以写入字段brand.brandbrand.userData.paid。内部的其余字段都可以写入。

2 个答案:

答案 0 :(得分:1)

禁用字段的简单答案是:

allow create: if !("ranking" in request.resource.data)

答案 1 :(得分:1)

我看到一些错误:

  1. 您写的是要防止写入paid的,但是您的规则显示为plan
  2. 您应该使用字符串而不是变量名,例如,以"brand"代替brand(因此会出现错误)
  3. 您希望brand.brandbrand.userData.paid字段为只读,对吗?但是您的规则会阻止它们甚至出现在文档中,因为request.resource.data是完整的最终文档,不仅是您正在编写的内容。

总而言之,这条规则应该做到:

allow update: if request.resource.data.brand.userID ==  request.auth.uid
  && request.resource.data.brand.userData.paid == resource.data.brand.userData.paid
  && request.resource.data.brand.brand == resource.data.brand.brand;

但是,如果您确实要拒绝对这些字段进行任何写操作,请使用

allow write: if request.resource.data.brand.userID ==  request.auth.uid
  && !('paid' in request.resource.data.brand.userData)
  && !('brand' in request.resource.data.brand);