将一些URL(我的意思是控制器)限制为仅限于同一本地网络用户

时间:2010-10-22 12:01:53

标签: ruby-on-rails

系统需要由两种人访问。本地用户(在本地网络中使用)和公共用户(使用域名访问的用户)如何使我的铁路应用程序限制我的公共用户访问控制器的一些URL?

使用两个具有相同mysql数据库的轨道但不同的端口和端口只转发一个? 限制一些网址只限本地用户? 使用apache而不是mongrel? 但是如何?

2 个答案:

答案 0 :(得分:1)

最安全的方法是创建程序的两个版本,每个版本只监听特定的端口和/或接口。但管理两个应用程序而不是一个应用程序可能成本太高。

我建议您检查请求对象,并确定可以使用哪些属性来区分“内部”和“外部”访问。

在您的控制器中使用“before_filter”来授予或拒绝访问。

答案 1 :(得分:1)

您可以通过以下几种方式执行此操作:

拥有一个PublicBaseController和一个LocalBaseController。两者都继承自ApplicationController

class LocalBaseController < ApplicationController
  before_filter :local_only

  protected
  def local_only
    return false unless request.local?
  end
end

然后:

class AccountsController < LocalBaseController
  def index
    # will not execute unless it is local
  end
end

关于how Rails decides if a request is local,这是一篇很好的写作,尽管有点陈旧。