私はメモ共有アプリケーションを作成しています。同時に、合理的なセキュリティルールを持つと同時に、共同編集者をユーザーノートに追加できるようにするための最良の方法を探しています問題の構造については、私が今持っている何Firebase:コラボレーションアプリケーションのセキュリティルール
は以下の通りです:「ジョン・ドウ」は、ノートを作成すると
"users": {
"johndoe": {
"notes": {
"note1Key",
"note2Key"
}
},
"jane": {
"notes": {
"note3Key",
"note4Key",
"note5Key"
}
}
...
},
"notes": {
"note1Key": {
// actual note data
},
"note2Key": {
// actual note data
},
"note3Key": {
// actual note data
},
...
},
"shared": {
"johndoe" : {
"note5Key" : true,
"note3Key" : true
},
"jane" : {
"note1Key" : true
}
...
}
、ノートが所有者と掲載した協力者に付与された読み取り/書き込みアクセスをnotes/noteKey
に格納されます。さらに、ノートの鍵はuser/johndoe/notes/noteKey
に保存されています。この鍵は、彼によってのみ読み書きできます。このユーザが自分のメモに共同編集者(「Jane」)を追加したい場合、この同じメモキーはshared/jane/noteKey
に保存され、&に書き込まれます。この方法では、各ユーザーのメモをリストするときに、ユーザーがアクセスできるすべてのメモを一覧表示するために2つの場所から読む必要があります:user/johndoe/notes
とshared/johndoe
。
良いアプローチがありますか?私はshared
インデックスをグローバルにアクセスできるようにしたくないのですが、何とかそれを制限できますか? 1人のユーザーが異なるノートで多数の異なるユーザーと共同作業する可能性があるため、セキュリティルールを設定する方法、このインデックスへの読み取り/書き込みアクセスを制限する方法はわかりません。
shared
ノードロジックを逆転させ、ノートキーを尊重している所有者のサブノードの下に保存し、協力者のリストを含むように考えました:shared/jane/noteKey/collaborators/johndoe
。このようにして、グローバル読み取りルールとより限定的な書き込みルール(各ユーザーは自分のshared
ノードでのみ書き込み可能)を持つことができますが、ユーザーがアクセスするすべてのメモをリストする複雑さが大幅に増加します。あなたがしたかった