2013-01-23 25 views

答えて

31

あなたは非常に簡単に自分で表現できるので、Firebaseで「グループ」のための明示的なサポートは、ありません。あなたの状況に応じて2つのオプションがあります。

ファイアベースにグループ情報を格納しています。

以下のデータは、2つの群( 'アルファ' と 'ベータ')と保護されたデータの3個( 'thing1'、 'thing2'、及び 'thing3')

{ 
    "groups": { 
    "alpha": { 
     "joe": true, 
     "sally": true 
    }, 
    "beta": { 
     "joe": true, 
     "fred": true 
    } 
    }, 
    "data": { 
    "thing1": { 
     "group": "alpha" 
     /* data accessible only by the "alpha" group */ 
    }, 
    "thing2": { 
     "group": "beta" 
     /* data accessible only by the "beta" group */ 
    }, 
    "thing3": { 
     "group": "alpha" 
     /* more data accessible by the "alpha" group */ 
    } 
    } 
} 

を表すために使用することができますその後、我々は、セキュリティを強化するために、以下のルールを使用することができます。私は、{ID:「サリー」}で認証していた場合

{ 
    "rules": { 
    "data": { 
     "$thing": { 
     ".read": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)", 
     ".write": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)" 
     } 
    } 
    } 
} 

は、それでは私の認証対象として、私はthing1とthing3へのアクセス権を持っていますが、ではないでしょうthing2。

authトークンにグループ情報を格納しています。

独自の認証トークンを生成しており、認証時にユーザーが属するグループがわかっている場合、生成する認証トークンにグループのリストを保存できます。たとえば、ユーザー 'fred'の認証トークンを生成する場合は、「{id: 'fred'、groups:{alpha:true、beta:true}}」を含めることができます。

{ 
    "rules": { 
    "data": { 
     "$thing": { 
     ".read": "auth[data.child('group').val()] != null", 
     ".write": "auth[data.child('group').val()] != null" 
     } 
    } 
    } 
} 
+0

マイケル、私たちが探していたものが最初の選択肢でした。 – user1452215

+1

データへのアクセスを許可したい場合はどうすればいいですか?複数のグループ(1つではなく)の$ thing? .hasAnyChild()などのようなものがありますか? – Pl4yeR

+0

最初のJSONオブジェクトはどこにありますか?それはグループ、アルファ、ベータなどを定義しますか?私はあなたが実際のルールセキュリティオブジェクトにそれを入れることはできないと思います...何かが欠けていない限り? – Matt

関連する問題