Open4

Firebase storageでファイルへのアクセス権を動的に変更する

sabo10sabo10

Firebase storageに保存したファイルへのアクセス権を動的に変更したい場合には、カスタムメタデータとセキュリティルールが有効。

sabo10sabo10

Firebase storageセキュリティルール

例えば、管理者、所有者は常に読み込み可、第三者はファイルが公開設定されていたら読み込み可としたい場合には以下のように記述

rules_version = '2';
service firebase.storage {
	match /b/{bucket}/o {
		allow read: if request.auth.token.admin == true || request.auth.uid == resource.metadata.owner || resource.metadata.visibility == true;
		allow write: if request.auth.token.admin == true;
    }
}
sabo10sabo10

ファイルアップロード(Firebase functions, Node.js)

アップロード時には以下のようにカスタムメタデータをセット

bucket
    .upload(localFilePath, {
      destination: destFilePath,
      metadata: {
        metadata: {
          visibility: false,
          owner: ownerid,
        },
      },
    })
sabo10sabo10

アクセス権変更

アクセス権を変更したい場合には任意のタイミングでカスタムメタデータを更新するだけ。

bucket.file(path).setMetadata({
    visibility: true
  });
}