我有来自亚马逊云端服务器的公共和私人文件,公共文件工作正常,但现在我想通过经过身份验证的读取来确保其中一些是私有的。
私有文件有自己的Uploader DocumentUploader,文件是否需要存储在不同的存储桶中?现在它们都在一个桶里。
我曾经用Paperclip做了类似的事情,但似乎找不到使用Carrierwave和使用定时Authenticated_url
的好资源我看到他们在这里有类似的东西:
但我不确定如何实施它。
任何提示都将不胜感激。
答案 0 :(得分:24)
取决于安全性,但您可以设置特定Uploader类本身的文件权限,覆盖默认权限,如下所示:
class SomeUploader < CarrierWave::Uploader::Base
def fog_public
false
end
def fog_authenticated_url_expiration
5.minutes # in seconds from now, (default is 10.minutes)
end
.....
这将自动导致此上传器中的文件现在以临时AWS过期和访问键为前缀,并且将来的上传将设置为私有,即不可公开访问。
答案 1 :(得分:1)
据我所知here,您可能需要为安全文件创建另一个存储桶。
您可以自己实现“私有”文件的安全性,在您的模型中(如果有的话)可以添加一个字段来检查文件是否安全,然后您可以使用控制器。
您可以使用的一个不错的宝石是cancan。有了它,您可以管理模型和一些属性(安全字段),并根据您的用户个人资料提供授权与否。
答案 2 :(得分:0)
您可以在单独的上传器中设置carrierwave配置。像这样。
使用宝石&#39; aws-sdk&#39;,&#39;〜&gt; 2.10&#39; gem&#39; carrierwave-aws&#39;,&#39;〜&gt; 1.1&#39;
class BusinessDocumentUploader < CarrierWave::Uploader::Base
def initialize(*)
super
CarrierWave.configure do |config|
config.storage = :aws
config.aws_bucket = Rails.application.secrets.aws_bucket
config.aws_acl = 'private'
#acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
# Optionally define an asset host for configurations that are fronted by a
# content host, such as CloudFront.
config.asset_host = Rails.application.secrets.aws_asset_host
# The maximum period for authenticated_urls is only 7 days.
config.aws_authenticated_url_expiration = 60 * 60 * 24 * 7
# config.aws_authenticated_url_expiration = 2
# Set custom options such as cache control to leverage browser caching
config.aws_attributes = {
expires: 1.week.from_now.httpdate,
cache_control: 'max-age=604800'
}
config.aws_credentials = {
access_key_id: Rails.application.secrets.aws_access_key_id,
secret_access_key: Rails.application.secrets.aws_secret_access_key,
region: Rails.application.secrets.aws_region # Required
}
end
end
end