rails版
rails 3.2.1
目标:
仅访问ActiveAdmin登录页面。
代码:
route.rb
约束(:ip => /(^127.0.0.1$)|(^192.168.10.[0-9]*$)/)做
match 'admin/' => 'admin#login'
端
这不是工作,不是什么?
==========================
我编辑我的route.rb遵循代码
constraints(:ip => /(^127.0.0.1$)|(^192.168.10.[0-9]*$)/) do
ActiveAdmin.routes(self)
end
devise_for :admin_users, ActiveAdmin::Devise.config
这是工作!
答案 0 :(得分:4)
请参阅Rails指南章节路由(http://guides.rubyonrails.org/routing.html#advanced-constraints):
class WhitelistConstraint
def initialize
@ips = Whitelist.retrieve_ips
end
def matches?(request)
@ips.include?(request.remote_ip)
end
end
TwitterClone::Application.routes.draw do
match 'admin/' => 'admin#login',
:constraints => WhitelistConstraint.new
end
我确信这也可以用其他方式完成,但我相信你明白了。
答案 1 :(得分:0)
我使用这种方式,因为如果对于路由来说太复杂了,您可以将某些逻辑移到一个类中。
该课程必须有比赛吗?在其上定义的方法,如果应授予用户对该路由的访问权,则返回true;否则,将返回false。
这可以帮助我在不使用正则表达式的情况下将ips添加到数组中。
我希望这对某人有帮助)
class WhitelistConstraint
IPS = %w[
143.132.200.43
]
def self.matches?(request)
IPS.include?(request.remote_ip)
end
end
Rails.application.routes.draw do
constraints(WhitelistConstraint) do
ActiveAdmin.routes(self)
mount Sidekiq::Web => '/sidekiq'
end
end