Google cloud firestore Firestore安全规则-可以通过包含来自另一个数组的任何值的数组来保护文档

Google cloud firestore Firestore安全规则-可以通过包含来自另一个数组的任何值的数组来保护文档,google-cloud-firestore,firebase-security,Google Cloud Firestore,Firebase Security,我想答案是否定的,因为我在Firestore文档中找不到参考: 我有一个ACL设置,用户被分配到一个或多个用户角色(基本上是访问列表),例如 user.roles=['a','b','c'] 然后,还可以将每个记录提供给一个或多个用户角色(也是一个数组) record.access.roles=['c','d'] 我知道我可以在前端使用。。。但是,如果记录ACL列表中出现任何用户角色,我还需要使用类似的条件来保护数据,并返回true。目前,我只能找到支持阵列内条件的文档 事实上,这些文档讨论了

我想答案是否定的,因为我在Firestore文档中找不到参考:

我有一个ACL设置,用户被分配到一个或多个用户角色(基本上是访问列表),例如

user.roles=['a','b','c']

然后,还可以将每个记录提供给一个或多个用户角色(也是一个数组)

record.access.roles=['c','d']

我知道我可以在前端使用。。。但是,如果记录ACL列表中出现任何用户角色,我还需要使用类似的条件来保护数据,并返回true。目前,我只能找到支持阵列内条件的文档


事实上,这些文档讨论了数组在查询端的安全性,但没有提到是否/如何能够以这种方式保护数据

如果为了确定列表中的项目是否存在于另一个列表中,您希望数组的等价项包含any,那么我想您应该使用列表中的项目来检查,并将应检查的其他项目的列表传递给它


一般来说,我会依赖于我在这里链接的API文档,而不是正式的产品文档。您链接的文档没有显示您可以执行的所有操作的示例。API文档将帮助您了解所有可用的功能。

如果您希望等效的数组包含任何功能,以确定列表中的项目是否存在于另一个列表中,我认为您需要在列表中使用,并将应检查是否存在的其他项目列表传递给它


一般来说,我会依赖于我在这里链接的API文档,而不是正式的产品文档。您链接的文档没有显示您可以执行的所有操作的示例。API文档将帮助您了解所有可用的功能。

Bingo!这正是我需要的。我以前读过那个文档,但一定忘了它的存在。多谢道格!这实际上不起作用。使用发布的示例,firebase控制台中使用getUser().roles.hasAny(resource.data.access.roles)的安全规则确实允许该请求。但是,当使用数组发送查询时,该数组包含来自user.roles[]和resource.access.roles[]的值的any和交集,请求被拒绝,出现标准的“缺少权限”错误-有关如何筛选以满足权限并使请求获得批准的任何指导?如果没有看到与实际数据的实际查询匹配的完整规则,则无法判断可能出现的错误。我建议提出一个新问题。答对了!这正是我需要的。我以前读过那个文档,但一定忘了它的存在。多谢道格!这实际上不起作用。使用发布的示例,firebase控制台中使用getUser().roles.hasAny(resource.data.access.roles)的安全规则确实允许该请求。但是,当使用数组发送查询时,该数组包含来自user.roles[]和resource.access.roles[]的值的any和交集,请求被拒绝,出现标准的“缺少权限”错误-有关如何筛选以满足权限并使请求获得批准的任何指导?如果没有看到与实际数据的实际查询匹配的完整规则,则无法判断可能出现的错误。我建议提出一个新问题。