簡體   English   中英

RAILS_ROOT/public下Rails文件授權Ruby

[英]Ruby on Rails file authorization under RAILS_ROOT/public

我正在尋找一種對位於我的公用文件夾下的文件運行一種check_access的方法。 我聽說過 RAILS_ROOT/private。 我相信這個目錄滿足了我的需求。

但我沒有關於它的深入信息。 我的核心思想是提供文件以僅使用具有查看/下載文件能力的文件。 比如張貼的圖片,我不希望它們公開。 目前,凡是了解URL的人,只要指向正確的目錄,就可以訪問所有文件。

PS:/public 目錄下的文件是通過carrierwave gem 上傳的。

謝謝。

您可以在數據庫中定義權限,然后可以在向用戶顯示文件的 url 之前添加檢查。 如果您希望它們受到限制,則不應將文件保留在公用文件夾中。

如果您需要對您的文件進行訪問控制,您不想從您的公用文件夾中提供這些文件。 您的公用文件夾是由ActionDispatch::StaticFile或直接由您的 web 服務器提供的服務器 - 它們都沒有提供您想要的訪問控制。

相反,您將創建一個 controller 來提供文件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM