как разрешить доступ, даже если поле документа недоступно в правилах безопасности пожарного депо? - PullRequest
0 голосов
/ 11 января 2020

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

в правилах безопасности я хочу установить, что numberOfFollowers должно быть числом. и если у старого пользователя нет этого поля, то ему все равно разрешается обновлять свой документ.

, поэтому я установил правила безопасности следующим образом:

match /users/{userID} {

      allow update: if isValidUserStructure(request.resource.data)

    }

  function isValidUserStructure(user) {
        return (user.numberOfFollowers is number || user.numberOfFollowers == null)
             && user.banned is bool
             && user.contactNumber is string
             && user.createdAt is timestamp
             && user.domicile is string
             && user.email is string
  }

, но для старого пользователя доступ всегда запрещен у которого нет этого поля из-за этой строки (user.numberOfFollowers is number || user.numberOfFollowers == null)

1 Ответ

0 голосов
/ 11 января 2020

Чтобы проверить, не присутствует ли поле в каком-либо документе, вы должны проверить объект данных, который является объектом типа Map , используя документированную операцию in, которая проверяет наличие ключа:

function isFieldPresent(data, fieldName) {
    return fieldName in data;
}

Затем вы можете выбрать, что делать в этом случае.

Так как значение NULL является допустимым значением поля в Firestore, проверка на нулевое значение, как вы делаете сейчас, определенно не совпадает вещь, как проверка на небытие.

...