在我的应用程序中,我有许多不同的用户组,例如聊天室和特定项目。
如何允许这些组中的用户共享其状态数据,并查看该组中每个其他用户的存在,但是将该数据保持为外部世界的私密性?
在我的应用程序中,我有许多不同的用户组,例如聊天室和特定项目。
如何允许这些组中的用户共享其状态数据,并查看该组中每个其他用户的存在,但是将该数据保持为外部世界的私密性?
首先,您需要使用受支持的Firebase身份验证机制之一开始对用户进行身份验证。有关Firebase中的身份验证的详细信息,请访问: https://www.firebase.com/docs/security/authentication.html。
一旦您开始对用户进行身份验证,您的安全规则中就会通过您的用户安全,经过验证的用户数据 auth
变量。假设您已经过身份验证的用户,并且每个用户都有一个唯一的ID,可通过以下方式访问 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/
有权查看该组的状态数据,每个用户只能修改其个人数据。用户只能读/写其各自的用户节点。
为了进一步扩展这一点,假设您有一类特殊的用户,这是唯一允许创建组的用户。您可以在生成身份验证令牌时包含用户的权限级别(对于下面的示例,我们将设置 isAdmin=true
),并使用更新的安全规则授予该特殊访问级别。例如,如果只允许某些用户创建组,则可以更新$ groupid下的.write规则,如下所示:
"$groupid": {
// Only admins can create new groups.
".write": "auth != null && auth.isAdmin === true"
//...
}
首先,您需要使用受支持的Firebase身份验证机制之一开始对用户进行身份验证。有关Firebase中的身份验证的详细信息,请访问: https://www.firebase.com/docs/security/authentication.html。
一旦您开始对用户进行身份验证,您的安全规则中就会通过您的用户安全,经过验证的用户数据 auth
变量。假设您已经过身份验证的用户,并且每个用户都有一个唯一的ID,可通过以下方式访问 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/
有权查看该组的状态数据,每个用户只能修改其个人数据。用户只能读/写其各自的用户节点。
为了进一步扩展这一点,假设您有一类特殊的用户,这是唯一允许创建组的用户。您可以在生成身份验证令牌时包含用户的权限级别(对于下面的示例,我们将设置 isAdmin=true
),并使用更新的安全规则授予该特殊访问级别。例如,如果只允许某些用户创建组,则可以更新$ groupid下的.write规则,如下所示:
"$groupid": {
// Only admins can create new groups.
".write": "auth != null && auth.isAdmin === true"
//...
}