2015年9月21日月曜日

rubyのaws-sdkでamazonS3のaclを変更する

ユーザーの権限によって画像の公開範囲を制限する必要が出てきたので、
amazon S3のaclを動的に変えるコードを書きました。

s3 = AWS::S3.new
bucket_name = "xxx"
bucket = s3.buckets[bucket_name]
user.user_photos.each do |photo|
  o = bucket.objects[photo.url.path]
  if user.publicly?
    o.acl = :public_read
  else
    o.acl = :private
  end
end

photo.url.pathにはbucket_name以降の/からファイル名までのパスが入ります。

http://akasata.com/articles/292
http://qiita.com/ryo0301/items/791c0a666feeea0a704c
https://github.com/thoughtbot/paperclip/issues/1416