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可以做任何事情的。谢谢你的帮助,我会尝试这个。谢谢你的帮助,我会尝试这个。