Ответ 1
Правила безопасности не могут использоваться в качестве фильтров данных. Вы не можете просто прочитать весь путь сообщений и рассчитывать только на получение записей, которые вам разрешено видеть. Вместо этого вам нужно архивировать свои данные таким образом, чтобы вы могли прочитать весь путь, или сохранить индекс, записи которого можно просмотреть и извлечь их отдельно.
Например, сохраните записи по идентификаторам групп или идентификаторам пользователя:
/posts/$group/data...
/posts/$user/data...
И тогда вы можете гарантировать, что ваши пользователи имеют разрешения, назначив их соответствующим группам и просто получая сообщения для этих групп:
var ref = new Firebase(base + '/posts/' + GROUP_ID);
var posts = $firebaseArray(ref);
Или вы можете создать индекс сообщений, которые каждый пользователь/группа/etc может просмотреть:
/posts/$post_id/data...
/posts_i_can_view/$user_id/$post_id/true
И выберите их отдельно из главного списка. Такой инструмент, как Firebase-util, сделает это намного проще:
var fb = new Firebase(base);
var ref = Firebase.util.NormalizedCollection(
fb.child('posts_i_can_view/'+USER_ID),
fb.child('posts')
)
.select('posts.message', 'posts.user_id')
.ref();
var posts = $firebaseArray(ref);
Дальнейшее чтение структур данных Firebase:
https://www.firebase.com/docs/web/guide/structuring-data.html https://www.firebase.com/docs/web/guide/understanding-data.html https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html