Там нет явной поддержки «групп» в Firebase, потому что вы можете представить их самостоятельно довольно легко. Вот два варианта, в зависимости от вашей ситуации.
Хранение информации о группе в firebase.
Следующие данные могут быть использованы для представления 2 группы ('альфа' и 'бета') и 3 части защищенных данных ('thing1', 'thing2', и 'thing3')
{
"groups": {
"alpha": {
"joe": true,
"sally": true
},
"beta": {
"joe": true,
"fred": true
}
},
"data": {
"thing1": {
"group": "alpha"
/* data accessible only by the "alpha" group */
},
"thing2": {
"group": "beta"
/* data accessible only by the "beta" group */
},
"thing3": {
"group": "alpha"
/* more data accessible by the "alpha" group */
}
}
}
Тогда мы можем использовать следующие правила для обеспечения безопасности:
{
"rules": {
"data": {
"$thing": {
".read": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)",
".write": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)"
}
}
}
}
Итак, если я заверены {ID: «Sally»} как мой объект AUTH, я буду иметь доступ к thing1 и thing3, но не thing2.
Хранение информации о группе в токене аутентификации.
Если вы создаете свои собственные токены аутентификации, и вы знаете, в каких группах пользователь находится в момент их авторизации, вы можете сохранить список групп в маркете auth, который вы генерируете. Например, когда вы генерируете токен аутентификации для пользователя 'fred', включите «{id: 'fred', groups: {alpha: true, beta: true}}"
И затем вы можете принудительно ввести членство в группе:
{
"rules": {
"data": {
"$thing": {
".read": "auth[data.child('group').val()] != null",
".write": "auth[data.child('group').val()] != null"
}
}
}
}
Майкл, спасибо за ваш быстрый ответ, первым вариантом было то, что мы искали. – user1452215
Что делать, если вы хотите предоставить доступ к данным. $ Thing для нескольких групп (вместо одного)? Есть что-то вроде .hasAnyChild() или подобное? – Pl4yeR
Где именно идет первый объект JSON? Это определяет группы, альфа, бета и т. Д.? Я не думаю, что вы можете поместить это в объект безопасности реальных правил ... если я не пропущу что-то? – Matt