Я не мог найти его в документах, но есть ли способ определить группу пользователей и использовать эту группу для предоставления доступа к разным адресам, а не для предоставления доступа отдельным пользователям?
С уважением, LT
Я не мог найти его в документах, но есть ли способ определить группу пользователей и использовать эту группу для предоставления доступа к разным адресам, а не для предоставления доступа отдельным пользователям?
С уважением, LT
Там нет явной поддержки "групп" в Firebase, потому что вы можете легко представлять их сами. Вот два варианта, в зависимости от вашей ситуации.
Следующие данные могут быть использованы для представления двух групп ( "альфа" и "бета" ) и 3 частей защищенных данных ( "вещь1", "вещь2" и "вещь3" )
{
"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, но не к веществу2.
Если вы создаете свои собственные токены auth, и вы знаете, в каких группах пользователь находится в момент их авторизации, вы можете сохранить список групп в маркете 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"
}
}
}
}