我正在为病史应用程序开发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()调用来工作?
答案 0 :(得分:0)
我很不明白你的问题。
如果您想知道您所有的get
呼叫是否都可以正常工作,请确保它们会起作用。到目前为止,这不是问题。
如果要减少通话次数,可以在执行操作时声明一个函数以简化工作。