3

我知道这通常发生在控制器中,但我想知道是否可以config/routes.rb根据特定 IP(或 IP 范围)限制路由?有点像白名单。

例如,我想将此路由限制为仅在我们的子网上的 IP:

#config/routes.rb
require 'sidekiq/web'

MyApp::Application.routes.draw do
  resources :users
  ...
  mount Sidekiq::Web, at: "/sidekiq"      # <== restrict this based on IP address
  ...
end
4

1 回答 1

7

根据Rails Docs中的示例,您可以执行以下操作:

#config/routes.rb
require 'sidekiq/web'

MyApp::Application.routes.draw do
  resources :users
  ...
  mount Sidekiq::Web, at: "/sidekiq", :constraint => Whitelist.new
  ...
end

class Whitelist
  def initialize
    @ips = Whitelist.retrieve_ips
  end

  def matches?(request)
    @ips.include?(request.remote_ip)
  end

  def retrieve_ips
    # get and return your whitelist of ips
  end
end

Yehuda Katz 的这篇文章更详细地介绍了约束以及如何使用它们。

于 2013-02-07T19:27:25.557 回答