在Firestore规则中将路径中的资源属性用于exist()和get()

时间:2018-12-07 06:00:52

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

是否使用允许的resource.data属性在get()或exist()中动态创建路径?

我正在建立一个服务,活动组织者可以创建活动。来自不同组织的事件存储在/ events / {event}中,每个事件都有一个名为“组织”和“可见性”的属性。如果将“可见性”设置为“组织”,则仅应允许该特定组织的用户看到该事件。用唯一的ID标识用户,并且他们与组织的关联记录在/ organizations / {organization} / user / {user}中。

我为实现此目的而创建的安全规则不允许读取,即使是与事件关联的用户也是如此。

match /events/{event} {
    allow read: if resource.data.visibility == 'org' && exists(/databases/$(database)/documents/organizations/$(resource.data.organization)/users/$(request.auth.uid));
}

但是,当我用用户所属的实际组织标识符(例如aVVApyJo81AZihOO9Wfo)替换$(resource.data.organization)时,该规则起作用。规则或前端代码可能有问题吗?

不幸的是,由于该服务支持多个组织,因此我不愿意使用Firebase Auth自定义声明来有效地设置用户权限/注册,尽管我愿意改变数据的结构。预先感谢!

0 个答案:

没有答案