Почему мои разрешения на пожарный магазин не работают? - PullRequest
2 голосов
/ 21 апреля 2020

Мой код

created(){
let ref = db.collection('messages').orderBy('timestamp')

// subscribe to changes to the 'messages' collection
ref.onSnapshot(snapshot => {

  snapshot.docChanges().forEach(change => {
    if(change.type == 'added'){
      let doc = change.doc
      this.messages.push({
        id: doc.id,
        name: doc.data().name,
        content: doc.data().content,
        timestamp: moment(doc.data().timestamp).format('lll')
      })
    }
  })
})

Мои правила для firebase:

service cloud.firestore { match /databases/{database}/documents {
 match /messages/{document=**} {
  allow read, update, delete: if request.auth.uid == resource.data.uid;
  allow create: if request.auth.uid != null;
 }
}}

Моя ошибка

Uncaught Ошибка в onSnapshot: FirebaseError: Отсутствует или недостаточно разрешений.

поможет решить проблему

1 Ответ

0 голосов
/ 21 апреля 2020

Взгляните на Правила не являются фильтрами из документов.

Вы разрешаете только те операции чтения, которые удовлетворяют request.auth.uid == resource.data.uid, но вы пытаетесь прочитать все db.collection('messages') collection.

Попробуйте прочитать db.collection('messages').where('uid', '==', currentUserUid).

(И не забудьте на самом деле добавить в сообщения свойство uid.)


PS Ваши правила выглядят так, будто они предназначены для личных заметок, а не сообщений между пользователями. Если вы хотите, чтобы получатели отличались от авторов, вам придется изменить структуру данных и правила. Может быть, с полями authorUid и recipientUid, я не знаю, я еще ничего не делал в Firestore.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...