私の元のタイトルは「安全なユーザー アクセスのために、Firebase でユーザー (アカウント) データを構造化して保護する方法」でした。これがこの質問の領域であるため、代わりに、より一般的な質問を作成できると考えました。
私はhttps://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.htmlに精通していると言っていました
が、この記事と同じくらい素晴らしいですが、私の問題にはまったく当てはまりません。だからここに行きます。
まず、メール/パスワード認証タイプのシンプル ログインを使用します (ただし、ユーザーのメールの検証にサーバー側のコーディングが必要な場合は、代わりにペルソナを使用する可能性があります)。
ユーザー データ (読み取りユーザー アカウント) が格納された userData オブジェクトがあります。各ユーザーは、自分のアカウントに保存されているデータのみを読み取ることができる必要があります。すべてのユーザーがアクセスする実際のデータは、comingdata という別のノードに保存されます。
ユーザーが今後のデータのどのデータにアクセスできるかは、ユーザーが行った購入の種類によって決まります。
「サブスクリプション」タイプのユーザーは、サブスクリプションが期限切れになるまですべてのデータにアクセスできます。「now」変数を使用して、セキュリティ式でこれを実現できると思います。
「購入」タイプのものは、購入した(配列にリストされている)データのみにアクセスできます。
admin@mydomain.com は、すべてのユーザーのすべてのデータを読み取ることができる必要がありますが、今後のデータ ノードに対してのみ書き込み (および読み取り) を行う必要があります。
Firebaseに保存しようとしているテストデータ構造は次のとおりです。
new Firebase(url).update({
userData: {
"admin@mydomain.com" : {
subscription : {expire : '9999999999999'},
purchase : []
},
"testUser@somwhere.com" : {
subscription : {expire : '1379904665974'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
},
"testUser2@somwhereelse.co.uk" : {
subscription : {expire : '1379904734517'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
}
}
});
「。」のため、これは機能しません。文字。
次のような DOT マングルを使用する必要があります。
"admin@mydomainDOTcom" : {...}
むしろ、userData ノードの作成時に「push()」「空」のユーザー アカウントを作成し、ユーザーのユーザー名を {"id" : "admin@mydomain.com"} プロパティとして保存する必要がありますか?
Firebase でセキュリティ ルールを設定して、購入が成功したとき (PayPal など) の書き込みを除いて、userData の内容を常に読み取り専用にするにはどうすればよいですか?
これは、サーバー コードに頼らなくても安全に実行できますか?
サーバーのみが Firebase にデータを書き込むことができるようにセキュリティ ルールを設定できることはわかっていますが、これにはサーバー側のコードが含まれ、有効な PayPal 支払い通知 (IPN) に応答して適切なデータを書き込むことになります。 -サーバー側のコーディングにあまり熟練していないため(node.jsを成功させることができるはずですが)、回避したい側のコードだけでなく、LAMPスタック共有サーバーは必要なVPSよりもはるかに安価であるためです。ノード用 (ああ、私は php を実行できません :( )。
クライアント コードは、素晴らしい Angular.js / angularFire コンボを使用して開発されます。Jared さん
、
お時間を割いていただきありがとうございます。