IP-адрес клиента, отправляющего запрос, можно найти по номеру request.remote_ip
.
. Затем определите пользовательское ограничение для ограничения доступа к определенным IP-адресам или диапазонам IP-адресов.
Ваш маршрут.рб файл будет выглядеть так
require "ipaddr"
MyApp::Application.routes.draw do
resources :users
constraints Whitelist.new do
get 'protected_routes'
end
end
class WhiteList
def initialize
@ips = ['127.0.0.1', '203.123.10.1']
@ip_ranges = [
{
start_ip: '192.168.0.1',
end_ip: '192.168.0.30'
},
{
start_ip: '10.1.1.1',
end_ip: '10.1.1.100'
}
]
end
def matches?(request)
return true if @ips.include? request.remote_ip
remote_ip_address = IPAddr.new(request.remote_ip).to_i
@ip_ranges.each do |ip_range|
low = IPAddr.new(ip_range[:start_ip]).to_i
high = IPAddr.new(ip_range[:end_ip]).to_i
return true if (low..high)===remote_ip_address
end
return false
end
end