Regra do banco de dados Firebase “Catch all other”

Talvez eu esteja lidando muito com esse problema do ponto de vista do SQL, mas estou tendo problemas para entender como restringir corretamente quais filhos devem ter permissão para preencher um nó.

Diga que quero manter um registro de produtos com nomes arbitrários. Cada p, roduto deve conter umprice, mas nada mais é permitido.

Minha abordagem ingênua foi adicionar um.validate regra para os produtos que exigem que newData contenha umprice filho, concedendo explicitamente acesso de gravação aoprice nó e, em seguida, remover todo o acesso a$other nó (um pouco como uma cláusula padrão em uma instrução switch):

{
    "rules": {
        "$product": {
            ".read": true,
            ".write": true,
            ".validate": "newData.hasChildren(['price'])",
            "price": {
                ".write": true,
                ".validate": "newData.isNumber()"
            },
            "$other": {
                ".read.": false,
                ".write": false,
            }
        }
    }
}

Isso não funciona. Adicionando um novo produto com{"price": 1234, "foo": "bar"} ainda será aceito.No entanto, se eu adicionar um".validate": false regra para$other, nada será aceito (por exemplo,{"price": 1234} não é permitido). (Eu fiz isso errado, de alguma forma.)

Existe alguma maneira de implementar algo semelhante ao que estou tentando fazer aqui? Caso contrário, qual é a maneira correta de restringir uma estrutura de dados no Firebase? Devo fazer isso? O que impede o usuário de encher meu banco de dados com lixo se não o fizer?

questionAnswers(1)

yourAnswerToTheQuestion