1

firebaseのクラウドファイアストアのルールを作成していますが、ユーザーの認証IDを使用してデータベースへのアクセスを制限したいと考えています。ルールと認証を使用してクラウドfirestoreデータベースにプライベート化

だから、私のデータベース構造はこのようなものです:

/ユーザー/ {userIdを} /グループ/ {groupIdを}

と私は、ユーザーだけが唯一、自分のしてドキュメントにアクセスできるようにしたいですユーザーID。これを実現するために

は、私は次のようなルール記述:

service cloud.firestore { 
    match /databases/{database}/documents { 

    match /users/{userId=**} { 
     allow read: if userId == request.auth.uid; 
    } 

    } 
} 

しかし、これでは、私のユーザーは、データベースから自分の「グループ」を読み取ることができませんでした。

私はJavaScriptを使用していて、「グループ」を取得するためのコードは以下の通りです:クラウドfirestoreがリアルタイムデータベースのような素敵なデバッグツールを持っていないので、私は私にはほとんどのデバッグをした

console.log("uid: ", uid) 
db.collection("users/" + uid + "/groups") 
    .onSnapshot(function(querySnapshot) { 
    querySnapshot.forEach(function(doc) { 
     console.log(doc.data()) 
    }) 
}) 

今自分の。

私は「5lS2NA21UgbabEw4AkyWyef9FH42」のUIDを持つテストユーザーを持っているので、私はこのようなルールを変更:これにより

service cloud.firestore { 
    match /databases/{database}/documents { 

    match /users/{userId=**} { 
     allow read: if "5lS2NA21UgbabEw4AkyWyef9FH42" == request.auth.uid; 
    } 

    } 
} 

、私のテストユーザーは(成功した彼の文書から「グループ」のデータを取得することができましたもちろん他のすべてのユーザーはできませんが)。

は今、私はこれにルール変更:

service cloud.firestore { 
    match /databases/{database}/documents { 

    match /users/{userId=**} { 
     allow read: if "5lS2NA21UgbabEw4AkyWyef9FH42" == userId; 
    } 

    } 
} 

をそして今、私は、データベースからデータを取得することができませんでした。

私が間違っていることを誰かに教えてもらえますか?

答えて

0

私はこれを考え出したと思います。問題は、この{userIdを= **}あなたは次のルール

service cloud.firestore { 
    match /databases/{database}/documents { 

    match /users/{userId=**} { 
     allow read: if userId == request.auth.uid; 
    } 

    } 
} 

を持っており、ユーザー/ 5lS2NA21UgbabEw4AkyWyef9FH42 /グループにアクセスしようとしている場合

は、「はuserId」変数は5lS2NA21UgbabEw4AkyWyef9FH42であることを評価しません(ました私はそれが何であるか分からないが、 "5lS2NA21UgbabEw4AkyWyef9FH42/groups"と推測するだろう)。だから、もしあなたが文書を民営化したいのであれば、以下のようにルール内のすべての文書を指定する必要があります。

service cloud.firestore { 
    match /databases/{database}/documents { 

    match /users/{userId} { 
     match /groups/{groupId} { 
      allow read: if userId == request.auth.uid; 
     } 
     match /events/{eventId} { 
      allow read: if userId == request.auth.uid; 
     } 
    } 

    } 
} 
関連する問題