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?