2016-06-04 10 views
2

Я хочу, чтобы пользователь мог загружать группу, если у них есть группа в их списке, как бы я написал правило для этого?Могу ли я создать правило в firebase, которое будет запрашивать значение в массиве push()?

Или есть способ написать правило для поиска значения в массиве pushbase?

Database Schema

Например, я хотел бы написать правило, может выглядеть следующим образом. Это правило неверно, но с целью объяснить мою точку зрения.

"groups":{ 
    "$group_id":{ 
    ".read":"root.child('users').child(auth.uid).child('groups').hasChildValue().val() == $group_id" 
    } 
}, 

Я только хочу, чтобы пользователь мог загрузить группу, если у них есть группа в их списке, как бы я написать правило для этого?


Обновление, как я его исправил. - Реструктуризация данных, которые будут плоскими. Избавьтесь от использования push() для добавления значений. - Плоские данные упростили обращение к клавишам.

Fixed Structure

"groups":{ 
     // root/users/auth.uid/groups/$group_id 
     "$group_id":{ 
      // only read if the user has the group_id 
      ".read":"root.child('users').child(auth.uid).child('groups').child($group_id).exists()", 
      // only write if logged in and it's new || if the user has group id 
      ".write":"(auth != null && !data.exists() && newData.exists()) || root.child('users').child(auth.uid).child('groups').child($group_id).exists()" 
     } 
    }, 
+0

".read": "root.child ('users'). Child (auth.uid) .child ('groups'). HasChild ($ group_id)", - это работает, если group_id является push auto_id, но не получает меня, что я хочу. – Branflake2267

+0

Может быть .forEach может работать. Я не уверен, что возвращаемое значение forEach есть, если вы возвращаете false в функцию. В противном случае вы можете изменить свою модель. Я думаю, что ваши данные выглядят так: https://www.firebase.com/docs/web/guide/structuring-data.html#section-indices – meriouma

+0

Не существует .forEach для правил, если я не пропущу что нибудь. Я смотрю на добавление других отношений, поэтому я могу сделать его двунаправленным, поэтому я могу ссылаться на него без необходимости бурить массив push. – Branflake2267

ответ

1

Это почти кажется, что вы пытаетесь «фильтр» данные группы, которая не является то, что Firebase правила для. Смотрите ссылку для справки:
https://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters

За то, что это звучит, как вы пытаетесь достичь (ограничить доступ для чтения групп) вам необходимо настроить модель данных на пути ваше приложение должно получить к нему доступ. Дайте мне знать, если это то, что вы ищете, и я могу обновить свой ответ.

+0

Да, я бы хотел применить запрос. Реструктуризация сделала трюк. – Branflake2267

+0

Рад, что вы смогли заставить его работать @ Branflake2267 – neojato

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