Firebase アプリで保護されたコンテンツの適切な承認規則へのベスト プラクティス アプローチはありますか
- 特にfirepadを使用する
- 保護されたコンテンツとは、ユーザーがドキュメントを作成し、特定の他のユーザーとのみ共有する場所を意味します)。
- また、アクセスできるすべてのドキュメント (私が作成したドキュメントと他のユーザーが私と共有しているドキュメント) について、firebase にクエリを実行できるようにする必要があります。
これまでの私の研究のいくつか:
方法 1: シークレット URL
ドキュメントを表示/編集できるようにするには、URL を知る必要があります
その URL へのアクセス権を持つログイン ユーザーは、その URL を編集/変更できるため、実際の認証ではありません。
アクセスできるすべてのドキュメントをインデックスに登録できない
方法 2: firebase 承認規則を使用してドキュメントにユーザーを追加し、読み取り/書き込みの前にユーザーが document.users であるかどうかを確認します。
出典: Firebase で保護されたコンテンツは可能ですか?
{
"documents": {
"$documents_id": {
// any friend can read my post
".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",
// any friend can edit my post
".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"
},
users:{
// List of user.ids that have access to this document
}
}
}
長所:
- 適切な承認/認証。アクセスを許可された認証済みユーザーのみが閲覧/編集できます。
短所:
- ユーザーが編集を許可されているすべてのドキュメント (自分が所有しているか、自分と共有されているドキュメント) を照会することはできません (この仮定は正しいですか?)
方法 3: Firebase 認可ルール (方法 2) に加えて、各ユーザーがアクセスできる document_id の配列を持つユーザーの冗長ストア。このユーザー ストアは、ユーザーがアクセスできるすべてのドキュメントをクエリするためにのみ使用されます。すなわち:
{
"documents": {
"$documents_id": {
// any friend can read my post
".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",
// any friend can edit my post
".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"
}
},
"users":{
"$user":{
".read": "auth.id=$user.id",
".write": "auth.id=$user.id"
"$documents":{
// All the documents i have access to. This list gets ammended whenever I am granted/stripped access to a document.
}
}
}
}
長所:
- 適切な認証/認可
短所:
- 重複データ。2 つのデータ ストア間の同期の問題に対処する必要があります。これは良い考えとは思えません。
方法 4: グループ
Firebase ロケーションへのアクセス権をユーザーのグループに付与するごとにグループを使用する
データストア内のすべてのドキュメントのグループがあります
ユーザーがアクセスできるすべてのドキュメントについて、firebase に簡単にクエリを実行できない
これを行うより良い方法はありますか?