Firebase数据库规则没有此类方法/属性' child'

时间:2016-07-30 06:57:47

标签: firebase firebase-realtime-database firebase-security

我是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

任何人都可以帮助我了解我的规则有什么问题以及我是否正确接近这个问题?

0 个答案:

没有答案