Ruby on rails 设计用户或管理员模型和Basecamp风格子域的登录

Ruby on rails 设计用户或管理员模型和Basecamp风格子域的登录,ruby-on-rails,ruby,ruby-on-rails-3,devise,Ruby On Rails,Ruby,Ruby On Rails 3,Devise,我为Desive用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了一些控制器和操作之外,一切都很好,我需要能够作为用户或管理员进行身份验证 目前我有一个用户!在我的应用程序_controller.rb中设置,我将使用skip_before_过滤器跳过这些控制器和只有管理员才应该访问的操作 不幸的是,我不能简单地在每个控制器上指定身份验证要求,因为我仍然需要一些控制器和操作供用户或管理员访问 我试过几件事都没用。似乎如果我移动用户!和你的管理员!它无法处理某些子域检测逻辑。基

我为Desive用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了一些控制器和操作之外,一切都很好,我需要能够作为用户或管理员进行身份验证

目前我有一个用户!在我的应用程序_controller.rb中设置,我将使用skip_before_过滤器跳过这些控制器和只有管理员才应该访问的操作

不幸的是,我不能简单地在每个控制器上指定身份验证要求,因为我仍然需要一些控制器和操作供用户或管理员访问

我试过几件事都没用。似乎如果我移动用户!和你的管理员!它无法处理某些子域检测逻辑。基本上:

current_subdomain = request.subdomains.first    
if current_subdomain == 'admin'
 authenticate_admin!
else
 authenticate_user!
end
我曾一度能够让它尝试身份验证,但由于某种原因,它无法使会话控制器不需要身份验证,这导致了重定向循环(对于我来说,这是Ruby的第一次!)

我意识到我可以给我的用户添加一个表示管理员状态的字段,但是应用程序需要用户和管理员之间的权限分离,除了一些控制器和操作之外

  • Ruby 1.9.2
  • Rails 3.0.3
  • 设计1.1.3

也许你应该考虑额外的Geang-CCAN来处理角色< /P> 这里描述得很好:


试着在过滤之前按照

#application_controller.rb
def authenticate_any!
    if admin_signed_in?
        true
    else
        authenticate_user!
    end
end
然后在控制器中,您希望管理员和用户都能够通过身份验证使用进行访问

#myobject_controller.rb
before_filter :authenticate_any!

如果您以管理员身份登录,那么您将通过before\u过滤器,否则您将通过authenticate\u user!这是默认行为。

实际上,这不起作用:

#application_controller.rb
def authenticate_any!
    if admin_signed_in?
        true
    else
        authenticate_user!
    end
end
它将在验证用户时启动无限递归

请尝试以下方法:

def authenticate_user!
  return if admin_signed_in?
  super
end
请记住,对于第二种解决方案,您所说的是: '您必须至少以用户身份登录' 并且您将仅丢失用户的身份验证


管理员将能够访问所有内容。

我也将这样做。