在更新中需要两个值

时间:2018-09-22 23:40:15

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

考虑这种称为ChatMessage的Bolt类型

路径

path /chats/{cid}/{mid} is ChatMessage {
    read() { auth.uid != null }
    write() { this.uid == auth.uid }
}

类型

type ChatMessage {
    uid: String,
    message: String,
    date_created: Number,
    date_modified: Number,

    validate() { this.message != null && this.date_modified != null }
}

已编译规则

{
  "rules": {
    "chats": {
      "$cid": {
        "$mid": {
          ".validate": "((newData.hasChildren(['uid', 'message', 'date_created', 'date_modified']) && newData.child('message').val() != null) && newData.child('date_modified').val() != null)",
          "uid": {
            ".validate": "newData.isString()"
          },
          "message": {
            ".validate": "newData.isString()"
          },
          "date_created": {
            ".validate": "newData.isNumber()"
          },
          "date_modified": {
            ".validate": "newData.isNumber()"
          },
          "$other": {
            ".validate": "false"
          },
          ".read": "auth.uid != null",
          ".write": "newData.child('uid').val() == auth.uid"
        }
      }
    }
  }
}

我发现的是这个

newData.hasChildren(['uid', 'message', 'date_created', 'date_modified'])

仅适用于创建操作,并且允许使用部分数据进行更新操作。很好!

但是,这

newData.child('message').val() != null) && newData.child('date_modified').val() != null

不阻止仅包含messagedate_modified的更新

目标是做到这一点,以便用户仅在提供messagedate_modified.的情况下才能更新其聊天记录

是否有一种方法可以在不更新消息时不使用Cloud Functions更新聊天的情况下实现这一目标?

0 个答案:

没有答案