Правила безопасности 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)