Regras de segurança do Firestore: o que acontece com request.resource.data. <prop> na atualização?

Minha equipe discutiu isso recentemente e parece que não consegue determinar com certeza o comportamento real / pretendido:

Se você possui uma regra de segurança como a seguinte:

match /categories/{document=**} {
    allow update: if request.auth.uid != null
    && request.resource.data.firstName is string
    && request.resource.data.lastName is string;
}

E você cria uma instrução de atualização do front-end para / categories / com os seguintes dados:

{
   firstName: 'A valid firstName'
}

A regra de segurança deve passar ou falhar?

Nodocumentação de referência, isso diz que

Os dados fornecidos pelo desenvolvedor são apresentados em request.resource.data, que é um mapa que contém os campos e valores. Os campos não fornecidos na solicitação que existem no recurso são adicionados a request.resource.data

Perguntas relacionadas:

Isso significa que o sucesso / falha depende dos dados existentes no nó?O que acontece se alguém tentar atualizar com dados não especificados na regra de segurança, ou seja,{age: 28}Qual é a maneira recomendada de validar dados de atualização?

Pergunta 3 com mais detalhes (questão do esquema) Suponha que você tenha um modelo como este:

interface Category {
  firstName: string;
  lastName: string;
  age?: int;
  groupId?: string;
}

Agora criamos uma regra de segurança como esta:

match /categories/{document=**} {
    allow update: if request.auth.uid != null
    && request.resource.data.firstName is string
    && request.resource.data.lastName is string;
    && request.resource.data.age is int;
    && request.resource.data.groupId is string;
}

Então, temos o seguinte cenário, como eu entendo:

Nenhum desses cenários se encaixa bem com propriedades opcionais. Porque se você precisar fornecer todas as propriedades (como no cenário 1), não serão realmente propriedades opcionais. E se você não fornecer, como no cenário 2, ele falhará.

Talvez esteja faltando alguma coisa aqui, um guia básico sobre como validar dados com propriedades opcionais sendo gravadas no firestore?

Uma regra de segurança para um parâmetro opcional, algo como isto:

match /categories/{document=**} {
   allow update: if request.auth.uid != null
   && request.resource.data.firstName is string
   && request.resource.data.lastName is string;
   && request.resource.data.age is int; // ignore if NOT provided
   && request.resource.data.groupId is string; // ignore if NOT provided
}

questionAnswers(1)

yourAnswerToTheQuestion