Требование двух значений в обновлении - PullRequest
0 голосов
/ 23 сентября 2018

Рассмотрим этот тип болта, называемый ChatMessage

Путь

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

не блокирует обновление, содержащее только message или date_modified

.Цель состоит в том, чтобы сделать так, чтобы пользователь мог обновлять свой чат только в том случае, если он предоставил message и date_modified.

. Есть ли способ добиться этого без использования облачных функций для обновления чата, когда сообщениеобновлен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...