Поскольку я в настоящее время использую маршрутизируемую конечную точку, URL с истекшим сроком действия, к сожалению, не работают для меня.
Я обнаружил, что установка заголовка x-amz-acl
для установки разрешений работает в моем случае, поскольку все изображения доступны только через приложение и никогда напрямую.
# config/initializers/dragonfly.rb
app = Dragonfly[:images]
if Rails.env.production?
app.datastore.configure do |c|
# […]
c.storage_headers = {'x-amz-acl' => 'private'}
end
end
Еще один способ сделать это программно для некоторых изображений можно получить, вызвав метод put_object_acl
непосредственно в экземпляре хранилища Fog Dragonfly, например, в модели обратного вызова:
app = Dragonfly[:images]
app.datastore.storage.put_object_acl 'bucket-name', model.image_uid, 'private'
Это, конечно, будет работать только в том случае, если используемое хранилище фактически является хранилищем Fog, поэтому потребуется проверка.
У меня нет никаких тестов для этого решения в настоящее время, так как оно, похоже, требует большого количества насмешек. Так что, если у кого-то есть какие-либо отзывы об этом решении, я был бы очень признателен, если бы о нем узнали!