检查auth.id是否在具有firestore.rules的资源数据映射中?

时间:2019-07-08 14:07:25

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

我很难找到一种创建规则的方法,如果用户是文档的参与者,则该规则允许读取。

我有一个文档集合,其中每个文档中的“参与者”被定义为对象数组。当用户的auth.uid等于参与者对象之一的userId属性时,我想允许读取。

我的文档在Firestore中如下所示:
enter image description here

现在在我的firestore.rules中,我想写一些类似的东西:

if resource.data.participants.find(p => p.userId == request.auth.uid)

...但这是不可能的

是否有任何方法可以将其放入可以解决该问题的函数或另一种方法?

br,西蒙

2 个答案:

答案 0 :(得分:1)

目前,使用安全规则无法进行这种类型的检查,因为该语言没有迭代,并且列表类型对象上没有map()或filter()类型的函数。

您始终欢迎使用file a feature request(后者可能永远不会成为语言的一部分,但可以使用列表映射和过滤器)。

答案 1 :(得分:1)

您要查找的内容等同于查询中的array-contains,安全规则中的in。为了进行这种检查,您只想将用户的UID存储在一个数组中:

participantUIDs: ["tJ6Yn...solV2", "hijlD...uXFA2"]

然后,您可以使用以下命令在安全规则中进行检查:

if request.auth.uid in resource.data.participantUIDs