11

私のアプリケーションには、チャットルームや特定のプロジェクトなど、さまざまなユーザーグループがあります。

これらのグループのユーザーがプレゼンスデータを共有し、グループ内の他のすべてのユーザーのプレゼンスを確認できるようにしながら、そのデータを外部から非公開にするにはどうすればよいですか?

4

1 に答える 1

15

まず、サポートされているFirebase認証メカニズムの1つを使用して、ユーザーの認証を開始する必要があります。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"
  //...
}
于 2013-02-26T00:25:26.790 に答える