RT 现在用的 Carrierwave 将所有的图片都是放到 public 文件下面,如果想给图片访问加上访问权限(一个用户只能访问到他自己的图片),该怎么做呢? 请教大家给点思路
不放public目录,放其他目录,控制器处理权限逻辑
public
https://github.com/carrierwaveuploader/carrierwave/wiki/How-To%3A-Secure-Upload
但我更推荐用云储存(例如 S3)的权限控制,更方便和好扩展。
用 Aliyun OSS 好了,权限控制都有的,将 OSS Bucket 设成 private 空间,上传用 carrierwave-aliyun 来管理,每次浏览生成出来的下载地址是有有效期的鉴权地址。
https://github.com/huacnlee/carrierwave-aliyun
如果现有的已经放到 public 目录了,是 nginx 的话,单独为上传的子目录配置。
例如上传图片到 public/system 目录下。
location /public/system/ { proxy_pass http://backend; }
直接把请求交给 rails 应用处理,注意此配置一定要放在最前面,否则有可能不生效。
开启 nginx 的 sendfile http://nginx.org/en/docs/http/ngx_http_core_module.html#sendfile
在控制器里面再决定是调用 rails 的 send_file 方法,还是直接返回 403 http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_file