2013-04-11 7 views
6

Firepadを(主にFirebase以外のホストの)プロジェクトで使用したいと考えていますが、問題に近づける最善の方法を見つけるのにいくつか問題があります。Firebase JSONのセキュリティと配列

基本的には、多数のユーザーがおり、各ユーザーは多数のグループのメンバーになることができます。これらの「グループ」には、ユーザーが編集できる独自のFirepadがあります。私たちはすでにMySQLを使って深く開発されたデータベース構造を持っています。実際には私たちのユーザーデータを今すぐFirebaseに移行したくないので、もっと創造的だと思っていました。

ユーザーは、所属していないグループのFirepadを編集することはできません。そのため、私たちは認証トークンの一部として、ユーザーIDとそれに所属するグループのリストを送信しようとしました。次に、Firebase JSONセキュリティシステムを使用して、現在編集中のFirepadがユーザが属するグループのリストにあることを確認できます。

問題は、JSONシステムは多くのコマンドを受け入れていないようです。 indexOfはありません。auth変数にhasChildを呼び出すことはできません。

すべてのデータをFirebaseに移行することなく、ユーザーが所属するグループのFirepadを編集できるようにするにはどうすればよいですか? (またはデータベースの2つのコピーを維持する - 1つはMySQLで、もう1つはFirebaseで)

答えて

9

ここでのトリックは、グループの格納にオブジェクトの代わりにオブジェクトを使用することです(私は知っています。これをより簡単に、より直感的に)

{ 
    ... 
    "$group": { 
     ".read": "auth.groups[$group] == true", 
     ".write": "auth.groups[$group] == true" 
    } 
} 

とに、ユーザーが読んだことがあるだろう/書き込みアクセス:あなたが何かを持っている可能性があり、セキュリティルールで、その後

{ userid: 'blah', groups: { 'group1': true, 'group2': true, ... } } 

そして:だからあなたの認証トークンでは、あなたのようなものを保存したいです/ groups/<グループ> <グループ>が認証トークンに含まれている場合のみ。

+0

ビンゴ。私はおそらくそれを考えていたはずですが、角括弧でメンバーにアクセスすることが有効であるという明確化が役立ちます。ありがとうございました! –

+0

マイク、あなたたちはこの分野で何か改良を加えましたか? auth変数に使用できる関数を記述するドキュメントはありますか? – Samuel

+0

@Samuel特に変更はありません。一般的に、authには機能がありません。これは認証トークンのデータだけです。使用できる唯一の "関数"は、認証データに文字列がある場合です。部分文字列/正規表現の一致など、いくつかの方法があります。https://www.firebase.com/docs/security/api/string/ –