2016-08-14 7 views
2

Я новый в firebase, и я хочу знать, как выяснить вопрос о hasChildren() RuleDataSnapshot и о том, как будут проверяться данные.Избегайте создания дополнительных детей Firebase

Образца дб:

{ 
    "visitors" : { 

    "-KP4BiB4c-7BwHwdsfuK" : { 
     "mail" : "[email protected]", 
     "name" : "aaa", 
    } 
    ..... 
} 

Правило:

{ 
    "rules": { 
     "visitors": { 
      ".read": "auth != null", 
      ".write": "auth.uid != null", 
       "$unique-id": { 
        ".read": "auth != null ", 
        ".write": "auth != null", 
        ".validate": "newData.hasChildren(['name','mail'])", 
      } 
     } 

    } 
} 

Насколько я знаю, если я хочу, чтобы создать данные, поле данных должны иметь одни и те же имена, чтобы пройти проверку правил. Например: Если я изменил «имя» на «имена», и я пытаюсь создать новый узел со своими дочерними элементами, то правило работает, насколько я мог это понять. Мне интересно, что случилось, если я вручную добавлю новые поля для создания?

Например:

//Add extra fields which are not actually present 
var data = {name : "xxx",mail:"[email protected]",extra1:222,extra:333}; 
firebase.database().ref('visitors/').push(data); 

Результат:

"visitors" : { 
    "-KP4BiB4c-7BwHwdsfuK" : { 
     "mail" : "[email protected]", 
     "name" : "juan", 
    "extra1":222, 
     "extra2":333 
    } 
} 

Так что мой вопрос заключается в том, чтобы избежать создания дополнительных Чайлдс на узел? Я предположил, что это правило.

Заранее спасибо.

ответ

6

Ваше правило Validate говорит ваш пост должен иметь по крайней мере этих детей и не только этих детей. Чтобы гарантировать, что никакие другие дети не могут быть добавлены, вы должны добавить следующее к правилам:

{ 
    "rules": { 
    "visitors": { 
     ".read": "auth != null", 
     ".write": "auth.uid != null", 
     "$unique-id": { 
      ".read": "auth != null ", 
      ".write": "auth != null", 
      //This line says the new data must have ATLEAST these children 
      ".validate": "newData.hasChildren(['name','mail'])", 
      //You can add individual validation for name and mail here  
      "name": { ".validate": true }, 
      "mail": { ".validate": true }, 
      //This rule prevents validation of data with more child than defined in the 2 lines above (or more if you specify more children) 
      "$other": { ".validate": false } 
     } 
    } 
    } 
} 

Посмотрите here для другого примера.

 Смежные вопросы

  • Нет связанных вопросов^_^