我想检查我的数据是否不包含特定字段。
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);
最后两个语句给出错误,指出plan
和brand
是未知的。
我的文档是这样的:
{
brand: {
brand:xxxx
..
userData:{
paid:{}
}
}
我想确保没有人可以写入字段brand.brand
和brand.userData.paid
。内部的其余字段都可以写入。
答案 0 :(得分:1)
禁用字段的简单答案是:
allow create: if !("ranking" in request.resource.data)
答案 1 :(得分:1)
我看到一些错误:
paid
的,但是您的规则显示为plan
"brand"
代替brand
(因此会出现错误)brand.brand
和brand.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);