Rails\u ROOT/public下的Ruby-on-Rails文件授权

Rails\u ROOT/public下的Ruby-on-Rails文件授权,ruby-on-rails,carrierwave,Ruby On Rails,Carrierwave,我正在寻找一种方法,对位于我的公用文件夹下的文件运行一种类型的check\u access。我听说了RAILS_ROOT/private。我相信这个目录提供了我的要求 但我没有关于它的详细信息。我的核心思想是只为用户提供文件,用户可以查看/下载文件。比如一张张贴的照片,我不想让它们公开。目前,所有知道指向正确目录的URL的人都可以访问所有文件 PS:public dir下的文件通过carrierwave gem上传 谢谢。您可以在数据库中定义权限,然后在向用户显示文件url之前添加检查。如果要限

我正在寻找一种方法,对位于我的公用文件夹下的文件运行一种类型的
check\u access
。我听说了RAILS_ROOT/private。我相信这个目录提供了我的要求

但我没有关于它的详细信息。我的核心思想是只为用户提供文件,用户可以查看/下载文件。比如一张张贴的照片,我不想让它们公开。目前,所有知道指向正确目录的URL的人都可以访问所有文件

PS:public dir下的文件通过carrierwave gem上传


谢谢。

您可以在数据库中定义权限,然后在向用户显示文件url之前添加检查。如果要限制文件,则不应将其保留在公用文件夹中。

您可以在数据库中定义权限,然后在向用户显示文件url之前添加检查。如果要限制文件,则不应将其保留在公用文件夹中。

如果需要对文件进行访问控制,则不希望从公用文件夹提供这些文件。您的公用文件夹是通过
ActionDispatch::StaticFile
或直接通过web服务器访问的,这两种服务器都不提供您想要的访问控制

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

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
class filecontroller
如果您需要对文件进行访问控制,则不希望从公用文件夹提供这些文件。您的公用文件夹是通过
ActionDispatch::StaticFile
或直接通过web服务器访问的,这两种服务器都不提供您想要的访问控制

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

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
class filecontroller
RAILS\u ROOT/private可以做任何事情,我不知道你是从哪里知道的。我不知道你是从哪里知道RAILS\u ROOT/private可以做任何事情的。谢谢你的帮助,我会尝试这个。谢谢你的帮助,我会尝试这个。