Firebase Realtime Database - Как подписаться на дополнения базы данных? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть коллекция заметок в моей базе данных Firebase в реальном времени. Мои клиенты подписываются на изменения в пути базы данных / notes . Но когда «клиент A» добавляет новую заметку, данные не передаются в «клиент B».

export const startSubscribeNotes = () => {
  return (dispatch, getState) => {
    const uid = getState().auth.uid

    database.ref('notes')
    .orderByChild(`access/members/${uid}`)
    .equalTo(true)
    .on('value', (snapshot) => {
      console.log('notes .on()')
      let updatednotes = []
      snapshot.forEach( (data) => {
        const note = {
          id: data.key,
          ...data.val()
        }
        updatednotes.push(note)
      })
      dispatch(setnotes(notes))
    })
  }
}

Структура моей базы данных Database structure

Правила доступа к My Firebase

"notes": {
  ".indexOn": ["data/title", "access/author"],      
  //entry-level access
  ".read": "
    auth.uid !== null && query.equalTo === auth.uid
  ",
  "$note_id": {
    ".write": "
      //If new data
      (!data.exists() && auth.uid !== null) ||
      (
        data.child('access').child('author').val() === auth.uid 
      ||
        data.child('access/members').child(auth.uid).exists()
      )
    ",
    "data": {
      //access
      ".read": "
        //if author or assigned user
        data.parent().child('access').child('author').val() === auth.uid ||
        data.parent().child('access/members').child(auth.uid).exists()
      "
    }
  }
}

Приведенные выше правила доступа предназначены для предотвращения клиентовчитая все "заметки".

Однако - Новая заметка, созданная "клиентом A", что "клиент B" имеет доступ к , никогда не будет передана "клиенту B". Если «клиент B» перезагружает приложение, появляется новая заметка - но это отрицает назначение подписок.

Как я могу убедиться, что дополнения к узлу / notes доставляются моим клиентам с установленными правилами доступа?

...