Reglas de seguridad de Firestore: ¿qué sucede con request.resource.data. <prop> en la actualización?

Mi equipo ha discutido esto últimamente y parece que no puede determinar con certeza el comportamiento real / previsto:

Si tiene una regla de seguridad como la siguiente:

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

Y crea una declaración de actualización desde el frontend a / categories / con los siguientes datos:

{
   firstName: 'A valid firstName'
}

¿Se supone que la regla de seguridad pasa o falla?

En eldocumentación de referencia, dice que

Los datos proporcionados por el desarrollador aparecen en request.resource.data, que es un mapa que contiene los campos y valores. Los campos no proporcionados en la solicitud que existen en el recurso se agregan a request.resource.data

Preguntas relacionadas:

¿Esto significa que el éxito / fracaso depende de los datos existentes en el nodo?¿Qué sucede si alguien intenta actualizar con datos no especificados en la regla de seguridad?{age: 28}¿Cuál es la forma recomendada para validar los datos de actualización?

Pregunta 3 con más detalles (pregunta de esquema) Supongamos que tiene un modelo como este:

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

Ahora creamos una regla de seguridad 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;
}

Entonces tenemos el siguiente escenario, según tengo entendido:

Ninguna de esos escenarios encaja bien con propiedades opcionales. Porque si tiene que proporcionar todas las propiedades (como en el escenario 1), en realidad no son propiedades opcionales. Y si no los proporciona, como en el escenario 2, falla.

¿Quizás me estoy perdiendo algo aquí, una guía básica sobre cómo validar datos con propiedades opcionales que se escriben en firestore?

Una regla de seguridad para un parámetro opcional, algo como esto:

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
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta