2015-05-03 3 views
3

Пока что не повезло с правилами безопасности Firebase.Как проверить эту структуру данных с помощью правил безопасности Firebase?

Я это

{ 
    "rules": { 
     "users": { 
      "$user_id": { 
      ".read": true, 
      ".write": "auth !== null && auth.uid === $user_id", 
      "profile": { 
       ".validate": "newData.hasChildren(['first_name', 'last_name'])" 
      } 
     } 
     } 
    } 
} 

Я посылаю данные и профиля и один из них является пустым ... она позволяет ему писать какой-либо способ. Я завершаю данные, подобные этому ...

{ 
    "users" : { 
    "simplelogin:25" : { 
     "profile" : { 
      "first_name" : "John", 
      "last_name" : "" 
     } 
    }, 
    "simplelogin:26" : { 
     "profile" : { 
     "first_name" : "Bob", 
     "last_name" : "" 
     } 
    } 
    } 
} 

Любая помощь в том, как сделать вышеуказанные правила работы? Кажется, он не может правильно его проверить.

ответ

4

Вашего правило проверки является:

".validate": "newData.hasChildren(['first_name', 'last_name'])" 

Так что новые данные действительны, если он имеет first_name и last_name свойств.

Вы посылаете этот объект через:

"profile" : { 
    "first_name" : "John", 
    "last_name" : "" 
} 

Этот объект имеет first_name и last_name свойства, поэтому действуют в соответствии с вашим правилом.

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

"profile": { 
    ".validate": "newData.hasChildren(['first_name', 'last_name'])", 
    "first_name": { 
     ".validate": "newData.isString() && newData.val().length >= 10" 
    }, 
    "last_name": { 
     ".validate": "newData.isString() && newData.val().length >= 10" 
    } 
} 

Первый .validate гарантирует, что профиль имеет (по крайней мере) first_name и last_name свойства. Другие правила .validate гарантируют, что они имеют правильный тип и минимальную длину.

+0

Спасибо, Фрэнк - Это имеет смысл! – justbane

+0

Дополнительная информация для других! Мы должны указать '.validate' для всех узлов в' hasChildren'. Если нет, мы получим разрешение отклонить ошибку :( –

+0

Похоже, у вас была другая проблема @ChemicalProgrammer. Если она сохраняется, лучше открыть новый вопрос. –

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