基于路径组件和其他集合的Firestore规则

时间:2020-06-05 13:05:28

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

我正在尝试建立一个规则,使用户只能在购买了一项服务之后才能对聊天消息执行操作。

我的数据库结构如下:

我有购买集合:purchases/{purchaseId},其中包含buyer_id字段。 我也有邮件收集:/channels/{purchaseId}/thread/{threadId}

如果thread文档中的buyer_id中的用户与购买集合中的purchaseId相同,我想允许CRUD操作。

这是我尝试过的操作,暂时使用当前用户的ID(auth)。这也不起作用。 理想情况下,我将request.auth.uid替换为我要访问的文档中的字段,但是现在这样做。

match /channels/{purchaseId}/thread/{threadId} {
    allow read, create, update, delete: if get(/databases/{database}/documents/purchases/{purchaseId}).data.buyer_id == request.auth.uid;
}

我收到标准权限错误。我想念什么?

1 个答案:

答案 0 :(得分:1)

定义路径时语法错误。试试这个:

match /channels/{purchaseId}/thread/{threadId} {
    allow read, write: if get(/databases/$(database)/documents/purchases/$(purchaseId)).data.buyer_id == request.auth.uid;
}

用文档中的字段替换request.auth.uid

match /channels/{purchaseId}/thread/{threadId} {
    allow read, write: if get(/databases/$(database)/documents/purchases/$(purchaseId)).data.buyer_id == resource.data.buyer_id;
}