2016-06-20 7 views
1

火災ベースでは、保管機能が快適です。しかし、私はストレージ機能を使用する2つの質問があります。Firebaseはファイルアップロードの濫用を防止し、レガシーファイルを削除する方法を教えてください。

  1. ユーザーの無制限ファイルアップロードを防止するにはどうすればよいですか?たとえば、/ {uid}/{timestamp}/{fileName}のパスを書き込める場合、ユーザーはストレージが爆発するまでアップロードできます。
  2. レガシーファイルをトレースして削除するにはどうすればよいですか?ユーザーがイメージファイルでチャットメッセージをアップロードしてイメージを削除すると、ファイルはまだストレージに存在します。これを管理するフックはありますか?

ありがとうございました!

答えて

1

良い質問:

あなたはアップロードのための任意の制約を強制するためにFirebase Storage Security Rulesを使用することができます。ファイルに名前やメタデータに固有の識別情報が含まれている場合は、その情報をユーザーに関連付けて、時間ベースのアクセス(特に)を適用することができます。簡単な例:

match /files/{userId}/{fileName} { 
    // Only allow the authorized user to write to their files 
    allow write: if request.auth.uid == userId; 

    // Allow reads if the resource was created less than an hour ago 
    allow read: if resource.timeCreated < request.time + duration.value(60, "m"); 
} 

あなたはガベージコレクションのシステムのために求めている:)短い答えはあなたが任意のファイルを実行した場合、それが最善だということである側面に沿って削除すべてのデータベース・オブジェクトは、クライアント上で削除されますが、我々はすべて知っているようにクライアントは信頼できません。 private backupからデータベースデータを読み込み、参照されなくなったブロブを確認して削除するバッチジョブ(毎日)を設定することもできます。 Google Cloud Functionsを待って、ファイルのアップロード時にデータベースに書き込むなどの操作を実行して、この情報を同期することもできます。最後に、Object Lifecycle Managementメソッドを使用して、一定期間後にバケット内のオブジェクト(削除、アーカイブなど)をクリーンアップすることができます。

+0

私はバッチジョブをガベージコレクションに理解していましたが、最初の答えはファイルアップロードの悪用を防ぐための解決策ではないと思います。また、ストレージルールがデータベースを参照できない場合は不可能であることに気付きました。 –

+0

何か悪用する方法(あまりにも多くのデータを保存する、あまりにも頻繁にアップロードしようとするなど)があり、それらのベクターにはそれぞれ別の解決策が必要なため、「ファイルアップロードの悪用」を明確にしてください。そのため、(サーバー側に強制される)セキュリティルールが存在し、多くのケースをサポートするのに十分な柔軟性を備えているのはこのためです。 –

+0

それは私のせいです。あなたが言ったように、あまりにも多くのデータを保存すること、あまりにも頻繁にアップロードすることは、ファイルアップロードを乱用することの場合です。私はセキュリティルールのドキュメントでそれらを防ぐことは想像できません。 –

関連する問題