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

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

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

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

所以,我想要的是:

  1. 让Devise处理身份validation
  2. 挂钩到身份validation周期并validation管理员:
  3. 如果登录用户的类型为:administrator,则validationIP地址
  4. 如果有效IP,则继续
  5. 如果IP地址不在可接受的范围内,则不要登录

我该如何在这里挂钩Devise登录周期? 我如何根据自定义validation接受或拒绝登录尝试?

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

不要使用Devise。 让他们登录,用户或管理员 – 只需基本访问他们的IP地址上的某些控制器。 如果他们没有访问权限,则重定向。

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

class Admin::BaseController > ApplicationController before_action require_valid_ip def require_valid_ip # Test for IP. Redirect if bad end end 

其他类将从BaseController中inheritance

 class Admin::OtherController > Admin::BaseController ... end 

您也可以将许多此类内容放在像CanCan这样的授权gem中,但如果您的需求很简单,那么这也可能过于复杂。