Firestore Отсутствует или недостаточно разрешений после установки новых правил - PullRequest
0 голосов
/ 27 июня 2018

Я написал код, который отлично работает с правилами по умолчанию. Код такой:

function listenerNewMessages(chats) {

        chats.forEach(function(item) {

            db.collection("pm").doc(chats[0]).collection('messaggi')
            .onSnapshot(function(snapshot) {
                snapshot.docChanges().forEach(function(change) {
                    if (change.type === "added" && change.doc.data().idUser != idUser && (String(Date.now()) > change.doc.id  && dateChat < change.doc.id) && idChat != item) {

                        //alert('hai ricevuto un nuovo messaggio in '+ item)
                        $('#contact-'+item).removeClass('flash')

                        setTimeout(function(){
                            $('#contact-'+item).addClass('flash')
                        }, 50);
                    }
                })

            })
        })
    }

Но если я буду использовать эти правила

service cloud.firestore {
  match /databases/{database}/documents {
    match /pm/{pm} {
      allow read, write: if request.auth.uid == resource.data.partecipanti.partecipante1 || request.auth.uid == resource.data.partecipanti.partecipante2;
    }

  }
}

Я получаю

Uncaught Error in onSnapshot: Error: Missing or insufficient permissions.

что я делаю не так?

1 Ответ

0 голосов
/ 27 июня 2018

Вам необходимо добавить квалификатор request.resource для новых записей.

allow read, write: if request.auth.uid == request.resource.data.some-property-A || request.auth.uid == resource.data.some-property-A;

allow read, write: if request.auth.uid == request.resource.data.some-property-B || request.auth.uid == resource.data.some-property-B;

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