【问题标题】:How can I use Firebase to securely share presence data within a specific group?如何使用 Firebase 在特定群组内安全地共享状态数据?
【发布时间】:2013-02-26 00:25:26
【问题描述】:

在我的应用程序中,我有许多不同的用户组,例如聊天室和特定项目。

我怎样才能允许这些组中的用户共享他们的状态数据,并查看组中每个其他用户的状态,但不让外界知道这些数据?

【问题讨论】:

    标签: firebase firebase-security


    【解决方案1】:

    首先,您需要使用一种受支持的 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"
      //...
    }
    

    【讨论】:

    • 有没有这样的例子。
    • 效果很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 2019-12-10
    • 2017-02-07
    • 2021-06-14
    相关资源
    最近更新 更多