Firestore安全规则中的多个.get()调用

时间:2018-08-23 14:06:58

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

我正在为病史应用程序开发Firestore安全规则。我希望将工作人员和患者存放在单独的馆藏中,以确保符合HIPAA(例如,人力资源或呼叫中心工作人员不能查看临床记录)。患者属于一个小组,该小组确定他们可以使用哪些产品。患者不应看到其他人群的产品。员工需要有特权才能看到任何产品。

数据如下:

patient : {
    groupId: 1
}

product : {
    groupId: 1
}

staff: {
    canReadProducts: true
}

该规则允许患者阅读产品文档:

match /products/{productId} {
    allow read: if get(.../patients/$(request.auth.uid))
                   .data.groupId == resource.data.groupId
}

此规则允许工作人员阅读产品文档:

match /products/{productId} {
    allow read: if get(.../staff/$(request.auth.uid))
                   .data.canReadProducts == true;
}

此规则不起作用:

match /products/{productId} {
    allow read: if get(.../patients/$(request.auth.uid))
                   .data.groupId == resource.data.groupId
                || get(.../staff/$(request.auth.uid))
                   .data.canReadProducts == true;
}

为解决这个问题,对它们进行了简化,我正在测试用户是否已通过身份验证,还使用.exists()调用来检查文档是否存在。读取文档路径中的“ ...”以读取“ / database / $(databases)/ documents”。

我的问题是:如何在该Senario中获得多个.get()调用来工作?

1 个答案:

答案 0 :(得分:0)

我很不明白你的问题。 如果您想知道您所有的get呼叫是否都可以正常工作,请确保它们会起作用。到目前为止,这不是问题。

如果要减少通话次数,可以在执行操作时声明一个函数以简化工作。