2017-01-19 3 views
1

コンテキスト:私はFirebaseをバックエンドとして使用してアプリケーションを追跡しています。Firebaseノードはどのようにしてユーザーアクセスを制限し、管理者がレポートデータをプルできるように構成できますか?

  • タイムエントリ

    • エントリID
      • ユーザーID
        • クライアントID:私の現在のノード構造はそうのようなルートでタイムエントリおよびクライアントを持っています、時間、日付、説明など
  • クライアント

    • のClientID
      • 名、プロジェクトなど

私は、ユーザーに基づいて時間のエントリを追加し、引っ張っていた場合、この構造は正常に動作しますが、私は、クライアントごとにレポートを一緒に置く作業を開始したいと思います。現在のところ、これは、各ユーザーに対して別々のHTTPリクエストを作成し、次にクライアントIDでフィルタリングしてデータを取得することを意味します。

親ノードへのアクセスが許可されると、Firebaseのルール構造によってすべての子ノードへのアクセスが許可されるため、ユーザーが互いのエントリを表示または編集できないように制限できません。

質問:ノードを構成する方法はありますか?ユーザーには独自のタイムエントリを管理させるだけでなく、クライアントに関連付けられたすべてのエントリを1つのクエリで取得できるようにする方法がありますか?私が思い付くことができ

** 唯一の解決策は、単に報告の目的のために使用される単一のノードにエントリを複製したが、これは、持続可能なオプションのように

答えて

0

@ALを思えません。あなたの答えは、私がウェブ上でドキュメントを精練した後に行くことでした。データを複製するのが最善の方法です。

新しいFirestoreベータ版では、これに対処する方法がいくつか用意されています。

0

私がこれを行う方法は、Cloud Firestoreです。

各クライアントのルートコレクションclientsとドキュメントを作成します。これにより、データを簡単に管理できるチャンクに分割して、クライアント管理者が自社のすべてのデータを参照できるようにします。

クライアント文書内で、timeEntriesというサブコレクションを作成します。ユーザーがこれに書き込むとき、彼らはは、あなたが今、管理者が照会できるようにする、読み取りルールを作成することができますrequest.auth.uid

https://firebase.google.com/docs/firestore/security/rules-conditions#data_validation

に等しいuserIdフィールドは、(あなたが規則でこれを強制することができます)含まれている必要がありますtimeEntriesサブコレクション内の任意のドキュメントですが、個々のユーザーは、作成したエントリのみを返すために、userId = request.auth.uidでクエリする必要があります。

https://firebase.google.com/docs/firestore/security/rules-conditions#security_rules_and_query_results

ユーザー/ {UID}コレクションやクライアント/ {}のclientIdコレクションの中で、あなたは簡単に管理ユーザーを特定し、データを読み込むときにこれを確認するためのフラグを作成することができます。

https://firebase.google.com/docs/firestore/security/rules-conditions#access_other_documents

関連する問題