加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Rails 3上设置文件下载权限的最佳方法

发布时间:2020-12-17 02:32:35 所属栏目:百科 来源:网络整理
导读:我想保护我网站上的一些文件,但我也希望授予某些用户下载该文件的权限.最好的方法是什么? 我只有一个想法 – 生成临时随机URL,如/files/hdad8fda299asnfqe/foo.bar 但我几乎不希望其他用户无法使用其他网址. 你知道任何宝石可以帮助我或建议另一种方法来保
我想保护我网站上的一些文件,但我也希望授予某些用户下载该文件的权限.最好的方法是什么?

我只有一个想法 – 生成临时随机URL,如/files/hdad8fda299asnfqe/foo.bar

但我几乎不希望其他用户无法使用其他网址.

你知道任何宝石可以帮助我或建议另一种方法来保护文件吗?

解决方法

保证真实下载的唯一方法是将它们移到“公共”路径之外,并通过检查授权的控制器将它们提供给用户. (我所知道的)最有效的方法是使用xsendfile.

因此,例如,首先在应用程序中创建一个新目录,让我们说“下载”(当然,您可以将其命名为任何名称,并且可以将其放在您的Rails服务器可以访问的系统中的任何位置.)

mkdir downloads

现在为下载做一个很好的新路线:

match '/downloads/*filename' => 'downloads#download'

然后创建一个新的控制器(或只是现有控制器中的一个动作)

class DownloadsController
  def download
    filename = [params[:filename],params[:format]].join('.')
    path = Rails.root.join( 'downloads',filename )

    if File.exists?(path) && user.can_download?( filename )
      send_file( path,x_sendfile: true )
    else
      raise ActionController::RoutingError,"resource not found"
    end
  end
end

然后你可以导航到

/downloads/path/my_file.txt

并让User#can_download?处理权限检查..

如果文件属于对象而不是文件系统中的松散文件,则会有所不同,您必须要求id而不是文件名并确定相关模型的路径,但原理是相同的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读