Разрешение по правилам безопасности Firestore - PullRequest
0 голосов
/ 29 марта 2019

У меня есть документы в коллекции пожарного хранилища, которые называются «инвентаризации» следующей структуры:

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

поле создателя - это идентификатор пользователя, создавшего документ.

В моем пожарном магазинеРаздел правил У меня есть следующие правила:

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.

Кто-нибудь может увидеть, что я делаю не так?Это проблема с моими правилами?Или это проблема с моим кодом, вызывающим пожарную?

1 Ответ

1 голос
/ 29 марта 2019

Вы должны использовать 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

...