我有一个数据库,我的用户文档可以具有以下字段:
['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
数据类型。我也想在可以单独设置配置文件对象并使用合并的地方执行相同的操作,但也强迫数据类型。
有没有办法在安全规则中实现这一目标?
要检查一个字段的子集,您可以在相反的方向上使用hasAll
来实现所需效果,例如:
allow create, update: if ['name', 'email', 'dob', 'gender', 'country', 'profile', 'notificationToken'].hasAll(request.resource.data.keys());