Rails设计限制管理员用户的IP地址访问

时间:2016-06-06 20:06:58

标签: ruby-on-rails devise

我的项目使用Devise进行身份验证(相当标准)。用户可以是普通用户,也可以是管理员用户。

我现在要求将管理员用户的登录限制为某些IP地址(在防火墙后面)。

我简单地考虑使用Rails路由约束,但这不适用,因为普通用户和管理员用户通过相同的登录页面登录。

所以,我想要的是:

  1. 让Devise处理身份验证
  2. 挂钩进入身份验证周期并验证管理员:
  3. 如果登录用户的类型为:administrator,则验证IP地址
  4. 如果有效的IP,请继续
  5. 如果IP地址不在可接受的范围内,请不要登录
  6. 我应该如何在这里挂钩Devise登录周期?我如何根据自定义验证接受或拒绝登录尝试?

    我正在使用Rails 4.2并设计4.1如果相关

1 个答案:

答案 0 :(得分:4)

不要使用Devise。让他们登录,用户或管理员 - 只需基本访问他们的IP地址上的某些控制器。如果他们无法访问,请重定向。

创建一个管理命名空间和基本控制器。您可以轻松地将其添加到路线中。从管理基础控制器对所有其他管理相关控制器进行子类化,以便它们继承之前的操作。

class Admin::BaseController > ApplicationController
  before_action require_valid_ip

  def require_valid_ip
    # Test for IP.  Redirect if bad
  end 

end

其他类将从BaseController

创建子类
class Admin::OtherController > Admin::BaseController


  ...
end

你也可以把很多这个放在像CanCan这样的授权宝石中,但如果你的需求很简单,这也可能过于复杂。