我是firebase规则的新手,我正在尝试为我的网络应用程序的聊天部分编写规则。我的数据库的聊天部分有聊天室孩子,每个孩子有3个孩子:user1,user2和msgs。 user1的值为其中一个成员的uid,user2的值为另一个成员的uid,msgs是由消息字符串组成的对象。
当用户开始与其他用户聊天时,我想确保创建的聊天室符合以下条件:
1)user1或user2值等于用户的uid。
2)user1或user2值等于其他成员的uid。
3)其他成员的朋友在用户的朋友列表中。
这是我用螺栓写的:
path /chats/{chat} is Chat{
read() {isInChat(auth, chat)} // Can only read if user's uid is equal to user1 or user2's value
write() {createOnly(this)} // Can only append the chatroom to list of chatrooms
validate() {(chat.child('user1').val() == auth.uid || chat.child('user2').val() == auth.uid) && isFriend(auth, chat) }
}
function isInChat (auth, chatRoom) { // Check if user1 or user2 is equal to user's uid
return chatRoom.child('user1').val() == auth.uid || chatRoom.child('user2').val() == auth.uid;
}
function isFriend (auth, chat) { // Check if other member of chat is in the user's friends list
return root.child('users').child(auth.uid).child('friends').child(chat.child('user1').val()) != null || root.child('users').child(auth.uid).child('friends').child(chat.child('user2').val()) != null;
}
function createOnly (value) { // Make sure node being created does not already exist
return prior(value) == null && value != null;
}
type Chat {
user1: String,
user2: String,
msgs: Object
}
这会产生以下规则:
"chats": {
"$chat": {
".validate": "newData.hasChildren(['user1', 'user2', 'msgs'])
&& ($chat.child('user1').val() == auth.uid
|| $chat.child('user2').val() == auth.uid)
&& (newData.parent().parent().child('users').child(auth.uid).child('friends').child($chat.child('user1').val()) != null
|| newData.parent().parent().child('users').child(auth.uid).child('friends').child($chat.child('user2').val()) != null)",
"user1": {
".validate": "newData.isString()"
},
"user2": {
".validate": "newData.isString()"
},
"msgs": {
".validate": "newData.hasChildren()"
},
"$other": {
".validate": "false"
},
".read": "$chat.child('user1').val() == auth.uid
|| $chat.child('user2').val() == auth.uid",
".write": "data.val() == null && newData.val() != null"
}
}
}
但是,当我尝试发布规则时,我会收到第一个No such method/property 'child'
行和.validate
行的错误.read
。
任何人都可以帮助我了解我的规则有什么问题以及我是否正确接近这个问题?