2017-09-17 1 views
0

J'essaie de sécuriser ma nouvelle base de données Firebase.Supprimer le dernier enfant du nœud Firebase

Ma structure:

parentNode 
-- child1 
-- child2 

Je voudrais éviter

  • supprimer TOUS les enfants à parentNode (en oubliant de préciser $ clé, écrivant à/parentNode)

I aimerait être en mesure de:

  • pousser un nouvel enfant à parentNode (écrit/parentNode)
  • supprimer un enfant par clé $ (écrit/parentNode/clé $)
  • supprimer l'enfant La dernière parentNode par touche $ (écrit/parentNode/$ key, nettoie firebase automatiquement parentNode parce qu'il est emtpy)

Ma solution actuelle (très basique ...):

parentNode: { 
    ".write": "newData.exists()", 
} 

Cela empêche toutes les données de suppression du parent, mais aussi empêche la suppression du SEUL enfant parce que ld signifie que le parent n'a plus de nouvelle donnée.

Des pointeurs?


SOLUTION: réponse Frank ci-dessous est le bon. J'ai essayé ceci avant, mais cela n'a pas fonctionné, parce que je n'ai pas fait de variable sur childNode - puisque je n'avais pas l'intention de l'utiliser.

"parentNode:" { 
    "childNode": { // <-- This was the problem 
    ".write": "data.exist() || newData.exists()" 
    } 
} 

La version correcte:

"parentNode:" { 
    "$childNode": { // <-- Notice the $ 
    ".write": "data.exist() || newData.exists()" 
    } 
} 

Firebase a fini par ignorer ma règle parce qu'il n'y existait pas de noeud avec un nom 'childNode'.

Répondre

0

La règle importante est de toujours appliquer vos exigences au bon niveau. Puisque vos règles semblent s'appliquer aux nœuds enfants, vous devez les appliquer.

Je pense que vous cherchez quelque chose comme:

parentNode: { 
    "$childNode": { 
     ".write": "data.exists() || newData.exists()", 
    } 
} 

Vous pouvez écrire ce que vous voulez, ou vous pouvez écrire null s'il y a une valeur existante là.

+0

Merci! J'ai ajouté quelque chose à ma question initiale pour compléter votre réponse. –