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

Firebase Firestore安全规则:允许字段子集,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我有一个数据库,其中我的用户文档可以包含以下字段: ['name', 'email', 'dob', 'gender', 'country', 'profile', `notificationToken`] 我希望在请求文档具有这些字段的子集时创建文档 无论是hasAll()在这里都不起作用(因为待创建文档可能没有所有字段),还是hasAny()都不起作用(因为待创建文档不能包含像'photo'这样的无效字段)。 另外,我希望如果存在一个字段,例如,'name',那么它应该是一个字符串。现在

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

['name', 'email', 'dob', 'gender', 'country', 'profile', `notificationToken`]
我希望在请求文档具有这些字段的子集时创建文档 无论是
hasAll()
在这里都不起作用(因为待创建文档可能没有所有字段),还是
hasAny()
都不起作用(因为待创建文档不能包含像
'photo'
这样的无效字段)。

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

allow create, update: if request.resource.data.name is string
如果待创建文档中不存在
名称
字段(如果稍后设置notificationToken字段并使用
setOptions.merge()
,则会返回false或error,因为我没有设置字段。但我希望它仅在字段存在时强制使用
字符串
数据类型。我也希望这样做,我可以单独设置profile对象并使用merge,但也可以强制使用数据类型


有没有办法在安全规则中实现这一点

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

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