Firestore安全规则权限问题

时间:2019-03-29 14:11:07

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

我在Firestore集合中有以下结构的称为“清单”的文档:

{
    creator: string,
    images: string[],
}

创建者字段是创建文档的用户的uid。

在“ firestore规则”部分中,我具有以下规则:

service cloud.firestore {
   match /databases/{database}/documents {  
     match /inventories/{inventoryid} {
       allow read, write: if request.auth.id == resource.data.creator;
     }
   }
 }

在离子应用程序中,我执行以下操作:

this.inventoryCollection = database.collection<Inventory[]>
    ('inventories', ref => ref.where('creator', '==', auth.currentUserId));

执行此操作时出现以下错误:

Missing or insufficient permissions.

有人可以看到我在做什么错吗?我的规则有问题吗?还是我的代码调用了Firestore的问题?

1 个答案:

答案 0 :(得分:1)

您应该使用request.auth.uid而不是request.auth.id,请参阅https://firebase.google.com/docs/reference/rules/rules.firestore.Request#auth

此外,您应将规则分为两个“子规则”,如下所示:

service cloud.firestore {
   match /databases/{database}/documents {  
     match /inventories/{inventoryid} {
       allow read: if request.auth.id == resource.data.creator;
       allow write: if request.auth.id == request.resource.data.creator;
     }
   }
 }

请注意,request.resource规则使用write

以下有关Firestore安全规则的官方视频对此做了很好的解释:https://www.youtube.com/watch?v=eW5MdE3ZcAw