Правила безопасности Firestore: Как проверить, что поле не определено?

Когда пользователь регистрируется и инициализирует свои данные в firestore, я хочу подтвердить, что он не пытается установить свою роль (т. Е. Поэтому он не устанавливает, например, "admin").

Я пытался написать это:

match /users/{userId} {
  allow create: if (signedInAs(userId) && !request.resource.data.role) || isAdmin();
  ...

... но я просто вижу "Роль свойства не определена для объекта".

Есть ли способ сделать это безопасно? Или это означает, что я всегда должен инициализировать ожидаемые поля, даже если это просто пустая строка? Это не совсем соответствует философии NoSQL?

1 ответ

Решение

Использовать in оператор, чтобы узнать, если свойство объекта не существует.

!("role" in request.resource.data)

Это дает логическое значение. Посмотрите это в документах API правил для типа Map.

Попробуйте с writeFields если другие решения не работают.

!("role" in request.writeFields)
Другие вопросы по тегам