2017-09-11 16 views
0

ごとに異なるルールが、私はこのように私のデータベースを持っている:Firebase Databaseルール:親と子

Firebase Rules ScreenShot

user123はadminです。したがって、のエントリのすべてのノードをループすることができます。その他ENTRYIDのUIDでない限りエントリの子を見ることができないが、私はこのためのルールを設定しなければならどう

をauth.uid?可能な方法がない場合は、データベースを変更するための提案:)

答えて

2

あなたがすでにadminを知っている場合、あなたの質問user123。次にデータベースルールあなたは、あなたが

"entities": { 
    "$entityId":{ 
     // you don't what others to see other to see teh data 
     ".read": "root.child('users').child(auth.uid).child('isAdmin').val() == true || root.child('entities').child($entityId).child('uid').val() == auth.uid" 
     // any one who is logged in should write to the /entries node 
     ".write": "auth.uid != null" 
    } 
} 

あなたはhttps://firebase.google.com/docs/reference/security/database/

また、ここから詳細情報を取得することができます行うことができますが、ルールがよりダイナミックにするためにどのような場合には

"entities": { 
    "$entryId":{ 
     // you don't what others to see other to see teh data 
    ".read": "auth.uid == 'user123'" 
     // any one who is logged in should write to the /entries node 
    ".write": "auth.uid != null" 
    } 
} 

ようにする必要がありますあなたのエントリーモデルをユーザー特有のものに変更することができます

{ 
    "entities" :{ 
    "user465": { 
     "entry456": { 
     "text" : "Some sample text" 
     } 
    } 
    } 
} 

この場合、ルールを書いてください

"entities": { 
    "$userId":{ 
    // you don't what others to see other to see teh data 
    ".read": "root.child('users').child(auth.uid).child('isAdmin').val() == true || $userId == auth.uid" 
    // any one who is logged in should write to the /entries node 
    ".write": "auth.uid == $userId" 
    } 
} 
+0

ルールは動的です。このルールでは、エントリを作成したユーザーはそれを読み取ることができません。たとえば、 'user123'は 'entry456'を読み取ることができるはずです – npk

+0

@Nameer更新された回答を参照して、エントリモデルも変更できます。 – bash

+0

しかし、管理者はすべてのエントリをループすることはできません。「Permission Denied」エラーが表示されます。 – npk

関連する問題