Restringir a consulta por um determinado valor filho nas regras de segurança

Estou lutando para encontrar a melhor maneira de estruturar parte do meu banco de dados e suas regras de segurança associadas.

Eu tenho grupos de bate-papo e os usuários podem ser adicionados a esses grupos a qualquer momento. Quando os usuários são adicionados a um grupo, eles devem conseguir recuperar apenas as mensagens enviadasdepois de este. Não deveria ser possível recuperar nenhuma mensagem que foi enviada antes de eles (os usuários) serem adicionados ao grupo.

Minha primeira abordagem assumiu erroneamente que as regras de segurança se aplicariam apenas aos dados consultados.

Simplificando para esta pergunta, eu tinha a seguinte estrutura:

{
    "groups": {
        "-Kb9fw20GqapLm_b8JNE": {
            "name": "Cool people"
        }
    },
    "groupUsers": {
        "-Kb9fw20GqapLm_b8JNE": {
            "3JzxHLv4b6TcUBvFL64Tyt8dTXJ2": {
                "timeAdded": 1230779183745
            },
            "S2GMKFPOhVhzZL7q4xAVFIHTmRC3": {
                "timeAdded": 1480113719485
            }
        }
    },
    "groupMessages": {
        "-Kb9fw20GqapLm_b8JNE": {
            "-KbKWHv4J4XN22aLMzVa": {
                "from": "3JzxHLv4b6TcUBvFL64Tyt8dTXJ2",
                "text": "Hello",
                "timeSent": "1358491277463"
            },
            "-KfHxtwef6_S9C5huGLI": {
                "from": "S2GMKFPOhVhzZL7q4xAVFIHTmRC3",
                "text": "Goodbye",
                "timeSent": "1493948817230"
            }
        }
    }
}

E estas regras de segurança:

{
    "rules": {
        "groupMessages": {
            ".indexOn": "timeSent",
            "$groupKey": {
                ".read": "root.child('groupUsers').child(auth.uid).child($groupKey).child('timeAdded').val() <= data.child('timeSent').val()"
                ".write": "!data.exists() && root.child('groupUsers').child(auth.uid).child($groupKey).exists() && newData.child('from').val() === auth.uid",
            }
        }
    }
}

Com isso, imaginei que poderia recuperar as mensagens para um grupo específico como este:

var myTimeAdded = /* already retrieved from the database */;
firebase.database()
  .ref('groupMessages/-Kb9fw20GqapLm_b8JNE')
  .orderByChild('timeSent')
  .startAt(myTimeAdded)
  .on('child_added', /* ... */);

Mas, como eu disse, essa foi uma suposição errada. Alguma sugestão de como eu poderia conseguir isso?

questionAnswers(1)

yourAnswerToTheQuestion