У меня есть коллекция заметок в моей базе данных 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))
})
}
}
Структура моей базы данных
Правила доступа к 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 доставляются моим клиентам с установленными правилами доступа?