Так, скажем, у меня есть данные, как это:Как структурировать данные в Firebase, созданные одним пользователем, но доступные пользователям в группе?
{
"events" : {
"s0d980983s" :
{ creator: "[email protected]",
text: "Bob says 'My name is Robert'" },
"kjl34jl234j" :
{ creator: "[email protected]",
text: "Fred says 'My name is Fredrick'" }
}
"users" : {
"[email protected]" : { "paid": true },
"[email protected]" : { "paid": false }
}
}
Я предполагаю, что это правильный способ структурирования данных. Когда данные создаются, я использую метод push()
для создания нового ключа для данных, а затем сохраняю создателя данных внутри него.
Я хотел бы сделать это так, чтобы:
- я могу позволить любому из группы пользователей для доступа к определенным данным (и запретить другим, очевидно).
- Запрос «оптимизирован», то есть если у меня есть тысячи записей, я не перебираю все данные.
Более конкретно, например, я хочу [email protected]
, чтобы увидеть s0d980983s
.
Я смущен, как структурировать данные и как должны выглядеть мои правила Firebase.
Будет ли это примерно так?
{ "events" : {
"s0d980983s" :
{ creator: "[email protected]",
viewers: { "[email protected]": true,
"[email protected]" : true },
text: "Bob says 'My name is Robert'" },
...
}
Я не понимаю, как я могу искать события, которые могут просматривать группы пользователей. Я не думаю, что Firebase поддерживает какой-то шаблон, который заставит этот код работать, не так ли?
var ref = firebase.database().ref("events/*/viewers/[email protected]").on(...);
Должен ли я также ссылаться на события внутри таблицы моих пользователей? Я не уверен, что я понимаю, как сгладить данные (денормализовать его) и сохранить ссылки в обоих местах для поддержки такого запроса. Должен ли я ожидать несколько запросов, когда я сначала получаю список событий, хранящихся в объекте пользователя, а затем извлекаю их один за другим с помощью их ключа? Но, как я вставляю эту логику в свои правила firebase?
Вы можете использовать подстановочные знаки при написании правил безопасности. Это видео может быть полезно https://www.youtube.com/watch?v=PUBnlbjZFAI –