【问题标题】:make files uploaded with carrierwave accessible only to activeadmin users使使用carrierwave上传的文件只有activeadmin用户可以访问
【发布时间】:2021-07-07 13:53:25
【问题描述】:

我正在使用carrierwave上传一些文件

class Document < ApplicationRecord
  mount_uploader :pdf_file, MyPdfUploader

class MyPdfUploader < CarrierWave::Uploader::Base
  storage :file

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{model.id}"
end

我现在希望只有经过 activeadmin 身份验证的用户才能访问此文件。 实现这一目标的正确方法是什么?

【问题讨论】:

    标签: ruby-on-rails activeadmin carrierwave


    【解决方案1】:

    默认情况下,Carrierwave 会将文件存储在 public/ 的子文件夹中,因此可以访问这些文件。您可以将 store_dir 设置为:

    def store_dir
      "#{Rails.root}/private/pdfs/#{model.class.to_s.underscore}/#{model.id}"
    end
    

    然后在您的 activeadmin 资源文件中,您可以通过自定义 member_action 使其可用,例如:

    member_action :download, :method => :get do
      if resource.pdf_file.present?
        send_file(
          IO.read(resource.pdf_file.file.path), 
          :filename => "#{resource.pdf_file.filename}", 
          :type => resource.pdf_file.content_type
        ) and return
      else
        flash[:notice] = "No pdf present"
        redirect_to resource_path and return
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 2014-04-25
      • 2013-06-30
      • 2011-10-06
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多