ユーザーがいくつかのプライベートデータを/private/$userId
に保存しているとしましょう。他のユーザーと共有できるかどうかは、決定はの/privacySettings/$userId/shareData
に保存する必要があります。ユーザーがその値をtrue
に設定すると、他のユーザーはプライベートデータを読み取ることができます。Firebase:ユーザーがデータのプライバシーを決定する方法を教えてください。
私はpersistance
が有効になっており、サーバーのルールでこれを解決しようとしている:これは正常に動作しますが、
"private": {
".read": false,
".write": false,
"$userId": {
".read": "auth != null && root.child('privacySettings/' + $userId + '/shareData').val() === true",
".write": "auth != null && auth.uid == $userId"
}
}
private/$userId
が.Value
で観察されたときに、残念ながらshareData
の変化は、イベントは発生しません。したがって、他のユーザーがプライバシーの変更前にこのパスを観察した場合でも、永続性データストアにキャッシュされたデータは引き続き表示されます。 shareData
がfalse
の場合、すべてのデータを他人に隠す必要があります。
これを行う方法?
EDIT: ただ、データが読み込まれた後shareData
がfalse
に設定されている場合、観察者は常にキャッシュされたデータに関係なく返されることが分かりました。これは、アプリの再起動時にも発生します。
EDIT 2: それについての詳細を考えた後、私は、コールバックが「Permission denied」エラーが戻った場合は、この問題は簡単に解決することができるという結論に達しました。
上記のルールの一部は無効です。編集で指摘したように、ルールはカスケードされます。親にパーミッションを付与した場合、子でそれを取り消すことはできません。 – cartant