Ruby 在 Rails 上 RAILS_ROOT/public 下的文件授权

Ruby on Rails file authorization under RAILS_ROOT/public

我正在寻找一种方法 运行 一种 check_access 到我的 public 文件夹下的文件。我听说了 RAILS_ROOT/private。我相信这个目录满足了我的需求。

但我没有关于它的深入信息。我的核心思想是只使用能够 view/download 文件的服务文件。比如一张贴图,我不希望它们是public。目前,所有知道 URL 指向正确目录的人都可以访问所有文件。

PS: /public目录下的文件是通过载波上传gem.

谢谢。

您可以在数据库中定义权限,然后在向用户显示文件的 url 之前添加检查。如果您希望这些文件受到限制,则不应将它们保留在 public 文件夹中。

如果您需要对文件进行访问控制,您不想从 public 文件夹中提供这些文件。您的 public 文件夹由 ActionDispatch::StaticFile 或直接由您的网络服务器提供服务器 - 两者都没有提供您想要的访问控制类型。

相反,您将创建一个提供文件的控制器:

class FilesController < ActionController::Metal
  before_action :authenticate! # you need to implement this
  before_action :authorize!    # you need to implement this

  # GET /files/:filename
  def show
    path = Rails.root.join(
      'uploads', # can be any directory you want really
       # avoids a malicous user being able to use for example '../../secret/password'
       ActiveStorage::Filename.new(params[:file_name]).sanitized
    )
    if File.exist?(path)
      send_file path
    else
      head :not_found
    end
  end
end