1

データベースへの読み取り/書き込みアクセスを制御する Firebase ルールの構成に取り組んでいます。元々はもっと多くのルールを書いていましたが、トラブルシューティング中に内容を減らしました。これが私の現在のルール構成です:

{
  "rules": {
   "developers": {
      "$dev": {
        ".write": "!data.exists() && auth != null",
        ".read": "auth.devBucket === $dev",
        "$proj": {
          ".read": "auth.devBucket === $proj",
          "shared": {
            ".write": "!data.exists() || (auth.devBucket === $dev && auth.projBucket === $proj)"
          }
        }
      }
    }
  }
}

私がやろうとしているのは、Firebaseのユーザーがまだ存在しておらず、ユーザーが認証されている限り、$devノード、ノード、および共有ノードを作成できるようにすることです。次に、認証トークンの devBucket が書き込み先のノードと一致し、認証トークンの projBucket が書き込み先のノードと$proj一致する限り、ユーザーが共有ノード内で自由に書き込みアクセスできるようにします。私は Android 用の Firebase カスタム認証システムを使用しており、これらの devBucket 変数と projBucket 変数を使用してトークンをロードしました。認証は間違いなく私の$dev$projlogcat、しかし、現在のルールでは間違いなく許可拒否エラーが発生しています。私は何日も Firebase ルールのドキュメントと質問をここに注いでいますが、ルール システムがどのように機能するかのニュアンスについてはまだ戸惑っています。

ドキュメンテーション ルールによると、JSON のネストの下位レベルまで引き継がれます。ノードとその子を 1 回作成するだけでなく、任意の数の子を作成できるルールを作成する方法を理解するのに苦労しています。適切に認証されている場合、shared の下に書き込まれるか上書きされます。

私がやろうとしていることを達成するためのルールを書く方法を知っている人はいますか?

編集:リスナーを自分のノードに向けようとすると、許可拒否エラーが発生することにも言及する価値があると思います。

4

1 に答える 1

0

自分に合った構成を見つけました。

{
   "rules": {
       "developers": {
         ".write": "!data.exists() || auth != null",
         ".read": "auth != null",
          "$dev": {
            ".write": "!data.exists() || (auth != null && auth.devBucket == $dev)",
            ".read": "auth != null && auth.devBucket == $dev",
            "$proj": {
              ".write": "!data.exists() || (auth != null && auth.projBucket == $proj)",
              ".read": "auth != null && auth.projBucket == $proj"
            }
          }
        }
    }
}
于 2015-07-26T06:34:56.247 に答える