我为 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/