在我的应用程序中,我有许多不同的用户组,例如聊天室和特定项目。如何使用Firebase在特定组内安全共享状态数据?
我该如何允许这些组中的用户共享他们的状态数据,并查看组中每个其他用户的存在,但是保持数据与外部世界的私密性?
在我的应用程序中,我有许多不同的用户组,例如聊天室和特定项目。如何使用Firebase在特定组内安全共享状态数据?
我该如何允许这些组中的用户共享他们的状态数据,并查看组中每个其他用户的存在,但是保持数据与外部世界的私密性?
首先,您需要使用其中一种支持的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"
//...
}
是否有这样的例子。 – Harry 2013-05-07 05:58:53
运作良好。谢谢 ! – Shirane85 2017-02-12 04:53:22