我正在尝试建立一个规则,使用户只能在购买了一项服务之后才能对聊天消息执行操作。
我的数据库结构如下:
我有购买集合: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;
}
我收到标准权限错误。我想念什么?
答案 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;
}