我正在构建一个网站,我希望保护某些图片免遭下载。只有授权用户才能下载它们。
当我使用Carrierwave上传图像时,它们存储在public/uploads/image
内。用户可以通过链接下载它们:
def transmit
send_file(Rails.root.join('public' , 'uploads', 'image', filename.to_s)
end
如何保护image
文件夹中的图像,以防止未经授权的用户访问它们?假设users
表有布尔列authorized
。
最好的方法是什么?
EDIT1:
我知道我可以before_action
允许未经授权的用户通过下载链接下载它,但如果用户知道存储图像的文件夹的路径,则仍然可以访问该图像。
答案 0 :(得分:2)
通常,carrierwave将图像存储在公共/上传目录中。
def store_dir
'public/my/upload/directory'
end
如果将文件存储在项目根文件夹之外,则可能需要以相同的方式定义cache_dir:
class MyUploader < CarrierWave::Uploader::Base
def cache_dir
'/tmp/projectname-cache'
end
end