1

次のようなデータ構造があります。

{
  "farms" : {
    "-J3saHfe8_2GRqn3jOTc" : {
      "stockunits" : {
        "-J4CAeRI-IKKXVuNILCv" : {
          "name" : "Chickens",
          "totalStockUnits" : 115
        }
      },
      "owner" : 3,
      "name" : "smith"
    },
    "-J3sbbqsGabs5cLaj0zP" : {
      "owner" : 2,
      "name" : "brown"
    }
  }
}

「/farms」をクエリすると、認証されたユーザーが所有者であるファームのリストを取得したいと思います。また、ユーザーが所有者ではないファームを表示できないようにしたいと思います。

私のルールは現在次のようになっています。

{
  "rules": {
      ".write": false,
  ".read": false,
  "farms": {
    "$farm": {
        ".read": "data.child('owner').val() == auth.id"

.read をこのレベルに置くことで、/farms/:farmid 経由でアクセスしたときに、個々のファームへの読み取りアクセスを許可していることがわかります。そして、「.read」を「farms」レベルに移動すると、リスト全体への読み取りアクセスが許可されます。

だから私は自分のデータを再構築する必要があると思いますが、これを行う最善の方法がわかりませんか? 特定のファームにも多数の「編集者」ユーザーを追加したいので、ユーザー オブジェクトの下にファーム オブジェクトを追加したくありません。

ご協力いただきありがとうございます

4

1 に答える 1

2

データを非正規化し、各ユーザーのプロファイルの下に個々のファーム オブジェクトへの参照を含める必要があります。この種の非正規化を行う方法の完全な例は、次のブログ投稿にあります: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

その例では、コード スニペットは投稿の下にコメントを整理することを示しています。同様の手法を使用して、ファームをユーザーにマッピングできます。

于 2013-09-26T19:09:05.263 に答える