1

导轨版本

导轨 3.2.1

目标:

仅访问办公室计算机的 ActiveAdmin 登录页面。

代码:

路由.rb

约束(:ip => /(^127.0.0.1$)|(^192.168.10.[0-9]*$)/) 做

 match 'admin/' => 'admin#login'

结尾

这不工作,任何suesstion?

===========================

我编辑我的 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

这是工作!

4

2 回答 2

5

参考 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

我相信这也可以用另一种方式来完成,但我相信你明白了。

于 2012-05-14T10:57:24.337 回答
1

我使用这种方式,因为如果路由过于复杂,您可以将一些逻辑移出到一个类中。

这个类必须有火柴?在其上定义的方法,如果用户应该有权访问该路由,则返回 true,如果用户不应该访问,则返回 false。

它可以帮助我在没有正则表达式的情况下将 ips 添加到数组中。

我希望,它可以帮助某人)

更多信息 - https://api.rubyonrails.org/v5.2.2/classes/ActionDispatch/Routing/Mapper/Scoping.html#method-i-constraints

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
于 2019-03-15T12:12:04.593 回答