(※2018/10/9 delete
は用意されている旨ご指摘頂きました。そのためこの記事は参考にならないかと思います。)
firebase storage のセキュリティルールでハマったので書いておきます。
firebase storage の rule は firestore と違いオペレーションが read
write
のみで create
update
delete
等は用意されていません。そのため、注意しなくてはいけないケースがあります。
例えば、画像の書き込みを 500KB 以下に制限したい場合、次のように書くと思います。
match /abc/{abcID}/image/{image} {
allow read: if request.auth != null;
allow write: if (request.auth != null &&
request.resource.size < 500 * 1024 &&
request.resource.contentType.matches('image/.*'));
}
一見良さそうですが、このままだと削除ができなくなります。理由は削除時 request.resource.size
の値が null
になるためです。そのため削除させたい場合、次のように書きます。
match /abc/{abcID}/image/{image} {
allow read: if request.auth != null;
allow write: if (request.auth != null && request.resource == null)
|| (request.auth != null &&
request.resource.size < 500 * 1024 &&
request.resource.contentType.matches('image/.*'));
}
下記の条件を追加している点がポイントです。
request.resource == null
これで削除もできるようになります。
参考
https://stackoverflow.com/questions/38922124/firebase-storage-post-rules-apply-to-delete-rules
ドキュメントに明示的には書いてないような気がします。