向一组用户授予对Firebase位置的访问权限

时间:2013-01-23 23:44:51

标签: firebase

我在文档中找不到它,但是有没有办法定义一组用户并使用该组授予对不同位置的访问权限,而不是授予对单个用户的访问权限?

此致 LT

1 个答案:

答案 0 :(得分:33)

Firebase中没有对“群组”的明确支持,因为您可以很容易地自己代表他们。根据您的具体情况,这里有两个选项。

在firebase中存储组信息。

以下数据可用于表示2组('alpha'和'beta')和3条受保护数据('thing1','thing2'和'thing3')

{
  "groups": {
    "alpha": {
      "joe": true,
      "sally": true
    },
    "beta": {
      "joe": true,
      "fred": true
    }
  },
  "data": {
    "thing1": {
      "group": "alpha"
      /* data accessible only by the "alpha" group */
    },
    "thing2": {
      "group": "beta"
      /* data accessible only by the "beta" group */
    },
    "thing3": {
      "group": "alpha"
      /* more data accessible by the "alpha" group */
    }
  }
}

然后我们可以使用以下规则来强制执行安全性:

{
  "rules": {
    "data": {
      "$thing": {
        ".read":  "root.child('groups').child(data.child('group').val()).hasChild(auth.id)",
        ".write": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)"
      }
    }
  }
}

那么如果我使用{id:'sally'}作为我的auth对象进行身份验证,我将可以访问thing1和thing3,但不能访问thing2。

在auth令牌中存储组信息。

如果您正在生成自己的身份验证令牌并且您知道用户在授权时所在的群组,则可以将群组列表存储在您生成的身份验证令牌中。例如,当您为用户'fred'生成身份验证令牌时,请添加“{id:'fred',groups:{alpha:true,beta:true}}”

然后您可以使用以下方式强制执行组成员资格:

{
  "rules": {
    "data": {
      "$thing": {
        ".read": "auth[data.child('group').val()] != null",
        ".write": "auth[data.child('group').val()] != null"
      }
    }
  }
}