1

私はFirebase WebアプリケーションにGoogleでログインできます。 私はauth.uidして、データベースへのアクセスを制御します。チームのアクセス許可を管理し、2人のユーザーが同じチームを形成してノードにアクセスできるようにする

{ 
    "rules": { 
    "users": { 
     "$uid": {   
      ".read": "auth.uid === $uid", 
      ".write":"auth.uid !== null", 
      "images": { 
       ".read": "auth.uid === $uid", 
       ".write":"auth.uid === $uid", 
     }, 
... 

は、私は彼/彼女のイメージにアクセスするために、ユーザーのチーム内の他のユーザーを有効にします。私はドキュメントを見に行きましたが、それを達成する方法を見つけることができませんでした。何か案は?

+2

Firedbaseと話す5つのニックなトリックをチェックすることをお勧めします.Toddがこのシナリオを[きちんとした仕掛け#2](https://youtu.be/5hYMDfDoHpI?t=9m13s)で正確にカバーしているGoogle I/Oから話してください)。 –

+0

きちんとしたトリック#2、まさに! – Guy

答えて

2

セキュリティルールは他のキーからデータを読み取ることができるため、キーの存在に基づくルール(チームのメンバーシップ)を構築できます。

path /teams/{$teamKey}/members/{$userId} is Boolean { 
    ... 
} 

path /users/{$userId}/shares/{$teamKey} { 
    ... 
    read() { root.teams[$teamKey].members[auth.uid] !== null } 
} 

JSONは次のようになります::

... 
"users": { 
    "$userId": { 
    ... 
    "shares": { 
     "$teamKey": { 
     ... 
     ".read": "root.child('teams').child($teamKey).child('members').child(auth.uid).val() != null", 
     ... 

うまくいけば、その意志

何下記のは、私がFirebaseデータベース用に使用してきましたBoltルールの小さな断片であります何か意味がある。基本的に、チームの鍵があり、それにはユーザーID(ブール値を含む)が含まれています。また、ユーザーのキーの下にある共有情報への読み取りアクセスは、メンバーシップを確認することによって、つまりチームキーの下にユーザーIDキーが存在するかどうかをチェックすることによって、他のチームメンバーに付与されます。基本的には、セキュリティルールを駆動するデータをデータベース自体に格納します。

あなたはBoltを使う必要はありませんが、JSON表現よりも管理がずっと簡単です。 Bolt言語のドキュメントには、Bolt定義とJSON定義の両方に関するRuleDataSnapshot Methodsに関する情報が含まれています。

+0

ありがとうございます、あなたは答えがはっきりしています。チームに特定のuidにメンバーを追加する権限を与えますか? – Guy

+0

はい。あなたはそれを取る必要がある限り、コンセプトを拡張することができます。ユーザーがチームを作成すると、そのチームはオーナーになり、オーナーにはチームメンバーに対する書き込み権限が与えられます。このメカニズムを使用して読み取り権限を管理することもできます。これにより、チームメンバーだけが他のメンバーを参照できるようになります。 – cartant

関連する問題