アップロードされたファイルを保護したいのですが、それらはpublic/uploadディレクトリに残っていて、アクセス可能であるため、ユーザは次のようにログインしていませんhttp://localhost:3000/uploads/video/1/test.mp4
。私はそれを防ぐために、コンテンツを見るユーザーがログオンしていて、それを見る権限がある場合にのみビデオを見ることができます。レールでアップロードされたログインファイルによって保護されますcarreirwave 5
私のアプリケーションは、ユーザーがワークショップを持ち、これらのセッションのそれぞれにビデオがあります。ここで私は私のモデル現在のファイルがcarrierwaveのデフォルトルートに格納されている
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :recoverable,
:rememberable, :trackable, :validatable
belongs_to :workshop
mount_uploader :avatar, AvatarUploader
enum role: [:student, :teacher]
end
class Workshop < ApplicationRecord
has_many :sessions
has_many :users
validates :name, presence: true
end
class Session < ApplicationRecord
belongs_to :workshop
mount_uploader :video, WsvideoUploader
before_create :default_name
def default_name
self.video ||= File.basename(video.filename, '.*').titleize if video
end
end
**enter code here**
の内容を残して、私は彼らがcarrierwaveから継承したクラスのコードを残します。
class WsvideoUploader < CarrierWave::Uploader::Base
# Choose what kind of storage to use for this uploader:
storage :file
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end