当然、私のデータベースのユーザーは、公的にアクセスできる情報や、自分だけが見るべきその他の情報を持っています。これを実装するための2つの異なる方法を検討しています。
オプション1:持っている/users/$uid
だけで、そのユーザーが読み取り可能としている/users/$uid/profile
誰にでも読めるよう。
オプション2:キープ/users/$uid
のみ、そのユーザーが読めると持って/profiles/$uid
公開されていることを。これは、よりフラットなデータ構造の推奨事項に従いますが、この場合にどのように優れているかはわかりません。
「よりフラットな」構造が優れている理由を理解する最も簡単な方法は、それをどのように保護し、次にどのように機能を実装するかを調べることです。
最初の構造は次のとおりです。
users: {
uidOfJacob: {
stackId: 884522,
ssn: "999-99-9999",
profile: {
displayName: "Jacob Philips"
}
},
uidOfPuf: {
stackId: 209103,
ssn: "999-99-9999",
profile: {
displayName: "Frank van Puffelen"
}
}
}
あなたはそれを次のように保護します:
{
"rules": {
"users": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
"profile": {
".read": true
}
}
}
}
}
公開情報を持つ主な理由の1つは、その情報のリストを表示できることです。JavaScriptの場合:
ref.child('users').child(???).child('profile').on('child_added'...
何を入れるので、これは機能しません???
。Firebaseの操作では、1つの場所からリスト全体を読み取ることができる必要があり、ユーザーはその場所全体(個々の子ノードだけでなく)に対する読み取り権限を持っている必要があります。
公開情報と個人情報を分離するようにデータを構造化すると、次のようになります。
users: {
uidOfJacob: {
stackId: 884522,
ssn: "999-99-9999",
profile: {
displayName: "Jacob Philips"
}
},
uidOfPuf: {
stackId: 209103,
ssn: "999-99-9999",
profile: {
displayName: "Frank van Puffelen"
}
}
},
"profile": {
uidOfJacob: {
displayName: "Jacob Philips"
},
uidOfPuf: {
displayName: "Frank van Puffelen"
}
}
あなたはそれを次のように保護します:
{
"rules": {
"users": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
},
"profiles": {
".read": true,
"$uid": {
".write": "auth.uid == $uid"
}
}
}
}
パブリックユーザープロファイルのリストを取得しないようにするには、次のようにします。
ref.child('profiles').on('child_added'...
誰もがの読み取り権限を持っているため、これは機能しprofiles
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加