Ответ 1
Во-первых, вам нужно будет начать аутентификацию своих пользователей, используя один из поддерживаемых механизмов аутентификации Firebase. Более подробную информацию об аутентификации в Firebase можно найти в https://www.firebase.com/docs/security/authentication.html.
Как только вы начнете аутентификацию пользователей, ваши безопасные проверенные пользовательские данные будут доступны вам в ваших правилах безопасности с помощью переменной auth
. Предположим, что у вас есть аутентифицированные пользователи, и каждый пользователь имеет уникальный идентификатор, доступный через auth.uid
.
Для совместного присутствия групп я бы рекомендовал хранить ваши данные с помощью такой структуры, как:
/groups/<group-id>/users/<user-id>/<presence-status>
Используя эту структуру, вы можете написать правила безопасности, которые сделают данные присутствия глобально частными, в то время как пользователь сможет просматривать только состояние присутствия для каждого пользователя в тех группах, которым им разрешено, и редактировать их собственное пользовательское состояние. Вот пример набора правил безопасности, который применяет эти ограничения:
{
"groups": {
"$groupid": {
// Users can view the presence state of users in this group if they
// are authenticated and listed in the group themselves.
".read": "auth != null && data.child('users').hasChild(auth.uid)"
"users": {
"$userid": {
// Users can update only their individual account data.
".write": "auth != null && $userid == auth.uid && newData.val() != null"
}
}
}
}
}
В приведенном выше примере только пользователи из /groups/<group-id>/users/
имеют разрешение на просмотр данных о присутствии для группы, и каждый пользователь может изменять только их отдельные данные. Пользователь может читать/писать только своему индивидуальному пользователю node.
Чтобы расширить это немного, позвольте сказать, что у вас есть специальный класс пользователей, которые являются единственными, разрешенными для создания групп. Вы можете включить уровень разрешений пользователя при создании токенов аутентификации (в примере ниже мы установим isAdmin=true
) и предоставим специальный уровень доступа с использованием обновленных правил безопасности. Например, если некоторым пользователям разрешено создавать группы, вы можете обновить правило .write в $groupid, чтобы выглядеть так:
"$groupid": {
// Only admins can create new groups.
".write": "auth != null && auth.isAdmin === true"
//...
}