Android Firebase管理员和用户帐户

Android Firebase管理员和用户帐户,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我正在用firebase构建一个Android应用程序。简单用户将登录并向数据库添加数据。用户将只能看到自己的数据。然后,我需要有一个管理员帐户,查看firebase数据库中的所有数据。我该怎么做呢 您是否以任何方式保护您的数据库?如果不是,我建议开始使用 我通常将我的数据库保护为,然后在数据库中为具有特殊权限的用户提供一个UID列表 因此,对于这样的JSON结构: users Power3000Uid: { ... } PufUid: { ... } admins Power300

我正在用firebase构建一个Android应用程序。简单用户将登录并向数据库添加数据。用户将只能看到自己的数据。然后,我需要有一个管理员帐户,查看firebase数据库中的所有数据。我该怎么做呢

您是否以任何方式保护您的数据库?如果不是,我建议开始使用

我通常将我的数据库保护为,然后在数据库中为具有特殊权限的用户提供一个UID列表

因此,对于这样的JSON结构:

users
  Power3000Uid: { ... }
  PufUid: { ... }
admins
  Power3000Uid: true
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
      }
    }
  }
}
安全规则如下:

users
  Power3000Uid: { ... }
  PufUid: { ... }
admins
  Power3000Uid: true
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
      }
    }
  }
}
换句话说,
.read
规则是:“如果您是此数据的所有者或管理员,则可以读取此数据”。在上面的示例中,这意味着您可以读取任何人的数据,但我只能读取自己的数据


根据您的具体需要,您需要在数据库中的不同位置重复admin子句,或者(我通常会做的)在JSON树的高层只重复一次。您是否以任何方式保护了数据库?如果不是,我建议开始使用

我通常将我的数据库保护为,然后在数据库中为具有特殊权限的用户提供一个UID列表

因此,对于这样的JSON结构:

users
  Power3000Uid: { ... }
  PufUid: { ... }
admins
  Power3000Uid: true
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
      }
    }
  }
}
安全规则如下:

users
  Power3000Uid: { ... }
  PufUid: { ... }
admins
  Power3000Uid: true
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
      }
    }
  }
}
换句话说,
.read
规则是:“如果您是此数据的所有者或管理员,则可以读取此数据”。在上面的示例中,这意味着您可以读取任何人的数据,但我只能读取自己的数据


根据您的具体需要,您需要在数据库中的不同位置重复admin子句,或者(我通常会这样做)在JSON树的高层只重复一次。

谢谢。还有一件事。我的应用程序将有3个登录选项-facebook、谷歌和电子邮件。FB和谷歌通常使用简单用户,而电子邮件则由管理员使用。因此,我必须手动创建一个帐户,然后将其放在管理员节点下?如果采用我的简单方法,您将不得不以某种方式将这些用户的UID添加到
/admins
节点。有许多其他的方法来实现这一点,但大多数情况下,它们在如何填充这个所谓的白名单上会有所不同。他们可能会在规则中以类似的查找结束:“如果用户存在于/位置,他们有特殊的权限”。谢谢。还有一件事。我的应用程序将有3个登录选项-facebook、谷歌和电子邮件。FB和谷歌通常使用简单用户,而电子邮件则由管理员使用。因此,我必须手动创建一个帐户,然后将其放在管理员节点下?如果采用我的简单方法,您将不得不以某种方式将这些用户的UID添加到
/admins
节点。有许多其他的方法来实现这一点,但大多数情况下,它们在如何填充这个所谓的白名单上会有所不同。他们可能会在规则中以类似的查找结束:“如果用户存在于某个地方,那么他们有特殊的权限”。