23

ドキュメントには見つかりませんでしたが、個々のユーザーにアクセスを許可するのではなく、ユーザーのグループを定義し、そのグループを使用してさまざまな場所へのアクセスを許可する方法はありますか?

よろしく、LT

4

1 に答える 1

37

Firebaseでは「グループ」を明示的にサポートしていません。これは、グループを自分で簡単に表現できるためです。状況に応じて、2つのオプションがあります。

グループ情報を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'}で認証されている場合、thing1とthing3にはアクセスできますが、thing2にはアクセスできません。

グループ情報を認証トークンに保存します。

独自の認証トークンを生成していて、ユーザーが認証時にどのグループに属しているかがわかっている場合は、生成した認証トークンにグループのリストを保存できます。たとえば、ユーザー'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"
      }
    }
  }
}
于 2013-01-24T00:53:30.743 に答える