我有一个数据库,我的用户文档可以包含以下字段:
['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
数据类型,如果该字段存在。我也想做同样的事情,我可以单独设置配置文件对象并使用合并,但也强制数据类型。
有没有办法在安全规则中实现这一目标?
答案 0 :(得分:0)
要检查字段的子集,您可以反方向使用hasAll
以达到所需的效果,例如:
allow create, update: if ['name', 'email', 'dob', 'gender', 'country', 'profile', 'notificationToken'].hasAll(request.resource.data.keys());