Vielleicht bin ich dieses Problem zu viel aus einer SQL-Perspektive, aber ich habe Probleme zu verstehen, wie Sie ordnungsgemäß einschränken, welche Kinder einen Knoten bevölkern dürfen."Catch all anderen" Firebase-Datenbankregel
Angenommen, ich möchte Produkte mit beliebigen Namen registrieren. Jedes Produkt muss eine price
enthalten, aber nichts anderes ist erlaubt.
Mein naiver Ansatz war eine .validate
Regel zu den Produkten hinzuzufügen newData erfordern ein price
Kind zu enthalten, explizit Schreibzugriff auf die price
Knoten gewährt und dann Entfernen all Zugriff auf einen $other
Knoten (etwa wie eine Standard-Klausel in einer switch-Anweisung):
{
"rules": {
"$product": {
".read": true,
".write": true,
".validate": "newData.hasChildren(['price'])",
"price": {
".write": true,
".validate": "newData.isNumber()"
},
"$other": {
".read.": false,
".write": false,
}
}
}
}
Dies funktioniert nicht. Das Hinzufügen eines neuen Produkts mit {"price": 1234, "foo": "bar"}
wird weiterhin akzeptiert. Wenn ich jedoch eine (Ich habe das falsch gemacht, irgendwie.)".validate": false
Regel zu $other
hinzufüge, wird stattdessen nichts akzeptiert (z. B. ist nicht erlaubt).
Gibt es eine Möglichkeit, etwas ähnliches zu implementieren, was ich hier versuche? Wenn nicht, wie kann eine Datenstruktur in Firebase eingeschränkt werden? Sollte ich es überhaupt tun? Was hält den Benutzer davon ab, meine Datenbank mit Müll zu füllen, wenn ich das nicht tue?
Ich bin nicht sicher, ich folge, warum '„$ andere“: {„.validate“: false}' ist nicht das, was Sie wollen. Ist Ihnen jedoch bewusst, dass Sie eine einmal erteilte Erlaubnis nicht widerrufen können? Also bedeutet '' write ": true' unter' $ product', dass Ihr '" .write ": false' unter' $ other' ignoriert wird? – cartant
@cartant Ich habe die Frage aktualisiert, um zu klären, warum validate nicht funktioniert. –