2016-09-08 3 views
0

Вот правила для списка объектов. Если вы прошли аутентификацию, вы можете получить доступ ко всему. Если нет, некоторые объекты являются общедоступными, некоторые - нет (логическое публичное свойство). Правило ниже для функции $ object отлично работает, если вы попытаетесь получить доступ к объекту напрямую.Правила базы данных Firebase: доступ к дочерним данным от родителя

"list": { 
    ".read": ???????????? , 
    ".write": "auth != null", 
    "$object": { 
    ".read": "auth != null || data.child('public').val() === true", 
    ".write": "auth != null" 
    } 
} 

Но мне также нужны правила, чтобы перечислять ТОЛЬКО публичные объекты, если вы не прошли аутентификацию. Как установить правила чтения для свойства сгенерированного ключа $ в его родительском списке? Что-то вроде:

"list":{ 
    ".read": "auth != null || data.child('$key').child('public').val() === true" 
} 
+0

Мэтью объясняет это ниже, но также см. Http://stackoverflow.com/a/14298525/209103 (и, возможно, большинство других вопросов, в которых упоминается волшебная фраза, «правила не являются фильтрами»). –

ответ

3

Вы не можете сделать фильтрацию по .read

От: https://firebase.google.com/docs/database/security/securing-data

правила не Фильтры

Правила применяются в атомном образом. Это означает, что операция чтения или записи немедленно прекращается, если в этом месте нет правила или в родительском местоположении, которое предоставляет доступ. Даже если для каждого затронутого дочернего пути доступен доступ, чтение в родительском местоположении полностью завершится с ошибкой .

+0

Да, я читал это. Вот почему я пытаюсь передать условие .read от ребенка к родительскому. Но должен быть способ фильтровать серверную сторону, которую пользователь может или не может видеть при перечислении объектов. Я ошибаюсь? – cerealex

+1

Нет, вы не можете, это именно то, что говорится. Если вы хотите отфильтровать его пользователем, вам придется хранить его где-то еще пользователем. –

+0

Итак, если нет участия в авторизации, вы можете выбрать только отображение всего списка или вообще ничего не показывать? – cerealex

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