3

假设我在 app/assets/images/privateimages/myrestrictedimage1.jpg 有一张图片,如果我尝试通过 url 直接访问图片,可以说类似

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

我能够查看图像。

我想有一种方法来检查任何 http 请求,以确定是否允许用户访问它。

我知道我可以在控制器中使用 before_filter 在继续执行任何控制器操作之前进行一些预处理,但我认为这对我没有帮助,因为我需要尝试执行控制器操作才能使其生效。

我听说我可以通过 rake 任务来完成它,但经过大量搜索后,我没有找到任何像我想要做的事情。也许我必须创建一个红宝石来做到这一点,但我不知道如何做到这一点。

谁能指出我正确的方向?谢谢。

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 回答