我很难找到一种创建规则的方法,如果用户是文档的参与者,则该规则允许读取。
我有一个文档集合,其中每个文档中的“参与者”被定义为对象数组。当用户的auth.uid等于参与者对象之一的userId属性时,我想允许读取。
现在在我的firestore.rules中,我想写一些类似的东西:
if resource.data.participants.find(p => p.userId == request.auth.uid)
...但这是不可能的
是否有任何方法可以将其放入可以解决该问题的函数或另一种方法?
br,西蒙
答案 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