使用Firebase限制对GroupChat中用户的访问
实际上,我正在构建react native&firebase群组聊天,我需要在适当的频道中分离用户。我有6个频道有适当的聊天,我不想一个用户可以创建他的频道。在我的应用程序中,我想授权访问A组中的5个用户,B组中的8个用户,等等。我目前有一个类似这样的firebase数据库 我的规则是:使用Firebase限制对GroupChat中用户的访问,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,实际上,我正在构建react native&firebase群组聊天,我需要在适当的频道中分离用户。我有6个频道有适当的聊天,我不想一个用户可以创建他的频道。在我的应用程序中,我想授权访问A组中的5个用户,B组中的8个用户,等等。我目前有一个类似这样的firebase数据库 我的规则是: { "rules": { "GeneralMessage": { ".read": "root.child('user').child(auth.uid).child('inGener
{
"rules": {
"GeneralMessage": {
".read": "root.child('user').child(auth.uid).child('inGeneral').child('GeneralMessage').child('read').val() === true",
".write": "root.child('user').child(auth.uid).child('inGeneral').child('GeneralMessage').child('write').val() === true"
}
}
}
但这不允许我访问读写选项
编辑:我在聊天室中推送聊天的本地代码
import * as types from './actionTypes'
import firebaseService from '../../services/firebase'
const FIREBASE_REF_MESSAGES = firebaseService.database().ref('/GeneralMessage')
const FIREBASE_REF_MESSAGES_LIMIT = 20
export const sendMessage = message => {
return (dispatch) => {
dispatch(chatMessageLoading())
let currentUser = firebaseService.auth().currentUser
let createdAt = new Date().getTime()
let chatMessage = {
text: message,
createdAt: createdAt,
user: {
id: currentUser.uid,
email: currentUser.email,
}
}
FIREBASE_REF_MESSAGES.push().set(chatMessage, (error) => {
if (error) {
dispatch(chatMessageError(error.message))
} else {
dispatch(chatMessageSuccess())
}
})
}
}
export const updateMessage = text => {
return (dispatch) => {
dispatch(chatUpdateMessage(text))
}
}
export const loadMessages = () => {
return (dispatch) => {
FIREBASE_REF_MESSAGES.limitToLast(FIREBASE_REF_MESSAGES_LIMIT).on('value', (snapshot) => {
dispatch(loadMessagesSuccess(snapshot.val()))
}, (errorObject) => {
dispatch(loadMessagesError(errorObject.message))
})
}
}
const chatMessageLoading = () => ({
type: types.CHAT_MESSAGE_LOADING
})
const chatMessageSuccess = () => ({
type: types.CHAT_MESSAGE_SUCCESS
})
const chatMessageError = error => ({
type: types.CHAT_MESSAGE_ERROR,
error
})
const chatUpdateMessage = text => ({
type: types.CHAT_MESSAGE_UPDATE,
text
})
const loadMessagesSuccess = messages => ({
type: types.CHAT_LOAD_MESSAGES_SUCCESS,
messages
})
const loadMessagesError = error => ({
type: types.CHAT_LOAD_MESSAGES_ERROR,
error
})
您的数据结构和安全规则不完全匹配。您有
/user/user.uid/ingeral/GeneralMessage/read
的规则,但数据结构中的ingeral下没有GeneralMessage子级
使用当前的DataStructure,您的规则必须如下所示:
{
"rules": {
"GeneralMessage": {
".read": "root.child('user').child(auth.uid).child('inGeneral').child('general').val() === true",
".write": "root.child('user').child(auth.uid).child('inGeneral').child('general').val() === true"
}
}
}
react本地代码?我刚刚编辑了我的帖子,但我认为这不是问题所在。问题是当我定义规则的时候,也许。在涉及到安全规则的情况下,通常最好有完整的图片。很多时候,这只是规则和读/写代码之间的简单不匹配。在您的情况下,我认为这是数据结构和规则之间的不匹配。我会在几分钟内写一个答案。