Firebase Firestore安全规则:允许字段子集

时间:2018-02-13 05:15:30

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

我有一个数据库,我的用户文档可以包含以下字段:

['name', 'email', 'dob', 'gender', 'country', 'profile', `notificationToken`]

我希望在请求文档具有这些字段的子集时创建文档 这里hasAll()都不起作用(因为要创建的文档可能没有所有字段),hasAny()也不起作用(因为要创建的文档不能包含像'photo'这样的无效字段) 。

另外,我希望如果一个字段,例如'name'存在,它应该是一个字符串。现在,如果我使用:

allow create, update: if request.resource.data.name is string

如果我要创建的文档中没有name字段,(如果我稍后设置了notificationToken字段并使用setOptions.merge()就是这种情况),则返回false或错误,因为我没有设置字段。但我希望它只强制string数据类型,如果该字段存在。我也想做同样的事情,我可以单独设置配置文件对象并使用合并,但也强制数据类型。

有没有办法在安全规则中实现这一目标?

1 个答案:

答案 0 :(得分:0)

要检查字段的子集,您可以反方向使用hasAll以达到所需的效果,例如:

allow create, update: if ['name', 'email', 'dob', 'gender', 'country', 'profile', 'notificationToken'].hasAll(request.resource.data.keys());