Я создаю простое веб-приложение crud, которое позволяет создавать назначенному пользователю, и как пользователь, входящий в систему, так и не пользователь может читать сохраненные сообщения. Интересно, как структурировать правило firebase для достижения этой цели?
Я проверил рекомендацию из этого поста: Firebase: как структурировать публичные / приватные данные пользователя и найти собственное решение, как показано ниже.
Я создал два узла: частный (пользователи) и общедоступный (посты), и на моем редуксе. Я дважды пытался записать данные как в частном, так и в открытом доступе, но получил отказ в доступе из базы данных.
Мой вопрос заключается в том, как обойти эту ошибку или есть лучший подход для ее устранения.
Спасибо
Мое правило пожарной базы:
{
"rules": {
"users": {
"$user_id": {
".read": "$user_id === 'Set_User_Id'",
".write": "$user_id === 'Set_User_Id'",
"posts": {
"$post_id": {
".validate": "newData.hasChildren(['title', 'postType', 'image', 'createdAt', 'note', 'link'])",
"title": {
".validate": "newData.isString() && newData.val().length > 0"
},
"postType": {
".validate": "newData.isString()"
},
"createdAt": {
".validate": "newData.isNumber()"
},
"image": {
".validate": "newData.isString()"
},
"link": {
".validate": "newData.isString()"
},
"note": {
".validate": "newData.isString()"
},
"$other": {
".validate": false
}
}
},
"$other": {
".validate": false
}
}
},
"posts": {
".read": true,
"$user_id": {
".write": "$user_id === 'Set_User_Id'",
}
}
}
}
Redux Действие для добавления данных дважды. один на частном узле (пользователи), а другой на общедоступном узле (сообщения).
export const startAddPost = (postData = {}) => {
return (dispatch, getState) => {
const uid = getState().auth.uid;
const {
title = '',
postType = '',
image = '',
createdAt = 0,
note = '',
link = ''
} = postData;
const post = { title, postType, image, createdAt, note, link }
return (
database.ref(`users/${uid}/posts`).push(post).then((ref) => {
dispatch(addPost({
id: ref.key,
...post
}))
}) &&
database.ref('posts').push(post).then((ref) => {
dispatch(addPost({
id: ref.key,
...post
}))
})
)
}
}; * * тысяча двадцать-одна