2016-08-12 3 views
5
{ 
    "rules": { 
     "users": { 
      "$uid":{ 
       //Private whatever under "uid" but Public is exposed 
       ".read": "auth != null && auth.uid == $uid", 
       ".write": "auth != null && auth.uid == $uid", 

       "public": { ".read": "auth != null" } 
       } 
       } 
      } 
} 
  • 私は、ユーザーのパブリック/プライベートプロファイルを持つようにこれらのルールを作成しました
  • ユーザー/{UID}/は公共は」プロファイルは、それらが認証されているすべてのユーザーがアクセスする必要がありますが、ここで、「ユーザー/ UID

の下でデータにアクセスすることはできません私のfirebaseデータベースに保存されているいくつかの偽のデータです。Firebaseセキュリティルールを使用してパブリック/プライベートユーザプロファイルを作成する方法は?

{ 
    "users" : { 
    "YFIIAgwa2kaannrXjwvSZmoywma2" : { 
     "Name:" : "Example 1", 
     //This public child should be accessible by 
     //"Example 2" but cannot know the name of 
     // this user 
     "public" : { 
     "email" : "[email protected]" 
     } 
    }, 
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { 
     "Name:" : "Example 2", 
     //This public child should be accessible by 
     //"Example 1" but cannot know the name of 
     // this user 
     "public" : { 
     "email" : "[email protected]" 
     } 
    } 
    } 
} 

これは、ユーザーの重要な情報にユーザーがアクセスするのを防ぐ強力な方法であるかどうかを知りたいと思います。とにかく私はvalidateを使ってこれを改善することができますか?私は皆さんのご意見をお待ちしております。私は私のアプリのための最高の単純なセキュリティルールを作成したい。

+0

タイトルをスペルチェックしてください。 –

答えて

7

プライベートおよびパブリックデータへのアクセスは、現在のデータ構造で確実に保護できます。

ただし、ある時点では、すべてのユーザーの公開情報の一覧を表示することをお勧めします。あなたの現在のデータ構造では不可能なので、Firebase's security model cannot be used to filter dataです。これをカバーする素晴らしい答えについては、Restricting child/field access with security rulesを参照してください。あなたを意味し、

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

今すぐ任意の認証されたユーザーが/public_profilesを聞くことができます:あなたがして、その後の安全なアクセスが可能

{ 
    "users" : { 
    "YFIIAgwa2kaannrXjwvSZmoywma2" : { 
     "Name:" : "Example 1", 
    }, 
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { 
     "Name:" : "Example 2", 
    } 
    }, 
    "public_profiles": { 
    "YFIIAgwa2kaannrXjwvSZmoywma2" : { 
     "email" : "[email protected]" 
    }, 
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { 
     "email" : "[email protected]" 
    } 
    } 
} 

ほとんどの開発者は、完全に別のサブツリーにパブリックおよびプライベートデータを分割しましたこれらのプロファイルのリストを簡単に表示できます。

0

あなたはパブリックフィールドとプライベートフィールドを持つように、データベースを(再)構造化するのは簡単ではないでしょうか?以下のような何か:

{ 
    "users" : { 
    "YFIIAgwa2kaannrXjwvSZmoywma2" : { 
     "private": { 
     "Name:" : "Example 1" 
     }, 
     "public" : { 
     "email" : "[email protected]" 
     } 
    }, 
    "YgSfSzPzxLbyDL17r6P9id2cdvH2" : { 
     "private": { 
     "Name:" : "Example 2" 
     }, 
     "public" : { 
     "email" : "[email protected]" 
     } 
    } 
    } 
} 

/UPD:彼らは親からそれらを継承しませんので、別の権限を持っている(ER)簡単にする必要があります。この方法はありますか?

+0

私はあなたがそれをどのように分けたのが好きです。私はそれを行うことができると思うが、将来私はそれにデータを追加したいときに入れ子の問題を作成しないだろう!パブリックデータ用に別のツリーを作成する方法はありますか? – user2884707bond

+0

"既定の"データにパブリックプロファイルを使用し、プライベートフィールドで追加のものをルックアップするのに使用できます。そうすれば、同じデータを持つ私的なものと公的なものの重複したフィールドが混乱することはありません。あなたはパブリックデータを要求し、次にプライベートデータを要求し、クライアント側でそれらをマージします。 – REJH

+0

あなたの助けをありがとう:D – user2884707bond

関連する問題