2017-12-04 14 views
1

JSアプリケーションからのFirebaseリアルタイムDBセキュリティ。Firebase匿名データセキュリティ

私はすべてのパスワード認証ユーザーに読み取りアクセス許可を与えています。 他のすべてのタイプ(自分のスキームごとに匿名のみ)では、特定の/ bundles /だけの読み取りを許可したいと思います。

これらはルールです - ログインした際に匿名として、私は唯一の最初の束を見て、期待する代わりに、私はからのエラーを取得する

"-L-2BbIkAg6J9WPMaJpJ": { 
    "anonymous": true, 
    "more_data": "data_1" 
    }, 
    "-L-UHBr45eEUHGwsPWqq": { 
    "anonymous": false, 
    "more_data": "data_2" 
    } 

-

{ 
    "rules": { 
     ".read": "auth != null && auth.provider == 'password'", // working! 
     "bundles": { 
      "$bundle": { 
       ".read": "data.child('anonymous').val() == true", // not working 
      } 
     }, 
    } 
} 

および/バンドルFB - "/ bundlesにpermission_denied"と表示されます。

+0

AFAIK Firebaseルールはデータをフィルタリングしません。 'ref.child( 'bundles')のようなクエリを実行しようとしていますか?once( 'value')'? – jaye

+0

これはフィルタリングと見ることができますが、私はhttps://firebase.google.com/docs/database/security/securing-data#structuring_your_rulesからそのアイデアを取りました。具体的に - "ルール":{ "メッセージ":{ "$メッセージは、":「data.child( 'タイムスタンプ'):{最後の10分から //メッセージのみを ".read" を読み取ることができます.val()>(now - 600000) "、 } } } – GuyC

答えて

1

/bundlesの場所にアクセスしようとしているため、.readが失敗します。代わりにあなたが直接特定のバンドルを照会した場合、それが通過します:

// read denied 
ref.child('bundles').once('value') 

// read allowed 
ref.child(`bundles/-L-2BbIkAg6J9WPMaJpJ`).once('value') 

あなたはFirebaseドキュメントのthis sectionに述べたように、Firebaseルールを介してデータをフィルタリングすることができません。スキーマを更新し、匿名のバンドルに別のノードを指定することをおすすめします。例:

{ 
    "rules": { 
    ".read": "auth != null && auth.provider == 'password'", 
    "anonymousBundles": { 
     ".read": "auth != null" 
    } 
    } 
} 
関連する問題