3

app/assets/images/privateimages/myrestrictedimage1.jpg に画像があるとしましょう URL経由で画像に直接アクセスしようとすると、次のように言います

 http://localhost:5555/assets/privateimages/myrestrictedimage1.jpg

画像を見ることができました。

http リクエストを検査して、ユーザーがアクセスを許可されているかどうかを判断する方法が必要です。

コントローラーで before_filter を使用して、コントローラーのアクションを続行する前に前処理を行うことができることはわかっていますが、これを有効にするにはコントローラーのアクションを実行する必要があるため、これが役立つとは思いません。

レーキタスクでできるかもしれないと聞いたことがありますが、多くの検索を行った後、私がやろうとしていることのようなものは見つかりませんでした. おそらく、これを行うにはルビーの宝石を作成する必要がありますが、これを行う方法がわかりません。

誰かが私を正しい方向に向けることができますか? ありがとう。

4

2 に答える 2

3

ラックミドルウェアを使用しました

ミドルウェア クラスは次のようになります。

class MyChecker  
  def initialize(app)
    @app = app       
  end                

  def call(env)
    if (docheck)
      #do stuff here such as check the path.
      #For example @path = env['PATH_INFO'] and compare against your okay paths  
      #if youre good and are able to continue then
      @app.call(env)
    else
      #redirect such as
      [301, {"Location" => /somewhere, "Content-Type" => "text/html"}, []]
    end
  end  

end 

以下をapplication.rbに追加して、ミドルウェアが見えるようにしてください。

class Application < Rails::Application
  ...
  config.autoload_paths += %W(#{config.root}/lib)  #if MyChecker is located in lib othewise substitute lib with wherever you have your middleware class
  config.middleware.use "MyChecker"
end
于 2012-07-19T15:41:34.630 に答える
2

Rack (rake ではなく)を見たいと思っています。

于 2012-07-12T02:42:26.183 に答える