提交数据时,我想确保我的客户不能保留随机字段。
同时,我想让我的应用程序尽可能简单,并且我尝试仅使用Firestore规则和/或索引(即不使用某些服务器端Express)来做到这一点。有可能吗?
我知道如何检查字段的存在和类型:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /example/{exampleId} {
allow create: if "fieldOK" in request.resource.data &&
request.resource.data.fieldOK is string
}
}
}
但是当您无法在规则中循环时,我不知道如何阻止创建诸如“ fieldBS”之类的随机字段。
答案 0 :(得分:1)
是的,您可以使用hasAll
或hasOnly
确保对象只有一定范围的键。
request.resource.data.keys().hasAll(['admin']);
request.resource.data.keys().hasOnly(['admin']);
您可以在Map
(键/值对)样式数据的任意嵌套级别使用此功能。
Firebase Rules Reference是解决此类问题的好资源。
仅检查了受支持的键范围后,此后对每个字段进行完整性检查仍然很重要。