ruby-on-rails - 使用用户或管理员模型和 Basecamp 样式子域设计登录

标签 ruby-on-rails ruby ruby-on-rails-3 devise

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

目前我有 authenticate_user!在我的 application_controller.rb 中设置,对于那些只有管理员才能访问的 Controller 和操作,我使用 skip_before_filter 跳过它。

不幸的是,我不能简单地指定每个 Controller 的身份验证要求,因为我仍然需要一些 Controller 和操作才能被用户或管理员访问。

我尝试了一些方法都无济于事。看来,如果我移动 authenticate_user !和 authenticate_admin!进入某种它无法处理的子域检测逻辑。基本上:

current_subdomain = request.subdomains.first    
if current_subdomain == 'admin'
 authenticate_admin!
else
 authenticate_user!
end

我曾一度能够让它尝试进行身份验证,但由于某种原因,它无法排除 session Controller 需要身份验证的情况,这导致了重定向循环(我第一次使用 Ruby!)。

我意识到我可以向我的用户添加一个字段来表示管理员状态,但应用程序需要用户和管理员之间的权力分离比允许的更大,除了一些 Controller 和操作。

  • ruby 1.9.2
  • rails 3.0.3
  • 设计 1.1.3

最佳答案

尝试按照

的方式编写自己的 before filter
#application_controller.rb
def authenticate_any!
    if admin_signed_in?
        true
    else
        authenticate_user!
    end
end

然后在您希望管理员和用户都能够通过身份验证访问的 Controller 中使用

#myobject_controller.rb
before_filter :authenticate_any!

如果您以管理员身份登录,那么您将通过 before_filter,否则您将通过 authenticate_user!这是默认行为。

关于ruby-on-rails - 使用用户或管理员模型和 Basecamp 样式子域设计登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4612545/

相关文章:

ruby - AWS lambda : Ruby function failing to load gem

html - 何时使用 Twitter Bootstrap 以及何时使用 HTML5 Boilerplate?

ruby-on-rails - 在运行时查找 ActiveRecord 类的关联?

ruby-on-rails - 使用 Ruby 1.9.3 进行 ruby​​ 调试?

html - 在 rails 上安装 bootstrap 3 后的文本域高度问题

javascript - 如何使用 Controller 加载自定义js文件?

jquery - 在 Rails 中使用 Ajax/jQuery 删除行,有些东西不起作用

ruby-on-rails-3 - 有条件的 to_param 方法

ruby-on-rails - 了解为什么 ruby​​ 进程在 100% CPU 时阻塞的方法

ruby-on-rails - 关系的未定义方法 `find_or_initialize'