2013-01-23 4 views
20

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

С уважением, LT

ответ

31

Там нет явной поддержки «групп» в 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" 
     } 
    } 
    } 
} 
+0

Майкл, спасибо за ваш быстрый ответ, первым вариантом было то, что мы искали. – user1452215

+1

Что делать, если вы хотите предоставить доступ к данным. $ Thing для нескольких групп (вместо одного)? Есть что-то вроде .hasAnyChild() или подобное? – Pl4yeR

+0

Где именно идет первый объект JSON? Это определяет группы, альфа, бета и т. Д.? Я не думаю, что вы можете поместить это в объект безопасности реальных правил ... если я не пропущу что-то? – Matt

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