用Devise + Active Admin + Switch登录其他用户的帐户用户

问题描述:

我试图在我现有的rails 3.0.9应用程序中实现switch_user gem。 上有我的应用程序两种型号,它们是用Devise + Active Admin + Switch登录其他用户的帐户用户

  1. 用户 - 为我的客户账户,它HAS_ONE帐户
  2. ADMINUSER - 这是由ActiveAdmin
创建

我已经为Users启用了设计验证,并且ActiveAdmin也与一起工作得非常好。现在,从我的Active Admin界面中,我想选择帐户并像帐户所有者一样登录到这些帐户。切换用户工作正常,但问题是任何人都可以简单地登录到现在的用户帐户,如果他们知道的网址。

http://localhost:3000/switch_user?scope_identifier=user_1

所有我需要的是只允许一个管理用户(即如果有ActiveAdmin会议)访问用户的帐户。

这是我/config/initializers/switch_user.rb看起来像

SwitchUser.setup do |config| 
    config.controller_guard = lambda { |current_user, request| current_admin_user.nil?} 
    config.redirect_path = lambda { |request, params| "/dashboard" } 
end 

但我得到这个错误

NameError in SwitchUserController#set_current_user 

undefined local variable or method `current_admin_user' for main:Object 

反正我有可以访问活动admin会话?

代码/config/initializers/active_admin.rb

ActiveAdmin.setup do |config| 
    config.site_title = "MyAppName" 
    config.authentication_method = :authenticate_admin_user! 
    config.current_user_method = :current_admin_user 
end 

顺便说一句我的应用程序控制器我尚未创建authenticate_admin_usercurrent_admin_user主动管理工作正常,没有他们的任何方法。

+0

我尝试了几乎所有我能想到但仍然没有运气的东西。其他人请吗? – randika 2012-01-03 12:33:16

好的我想我找到了一个解决方案来保护switch_user。我所做的是移动admin_users范围

ActiveAdmin.routes(self) 

    devise_for :admin_users, ActiveAdmin::Devise.config do 
    match '/admin/switch_user', :controller => 'switch_user', :action => 'set_current_user' 
    end 
+0

我似乎无法得到这个工作。当我耙路时,我甚至看不到路线。你有没有尝试过这个新版本的activeadmin? – meatherly 2013-12-16 17:35:33

内部路由需要修改本地config/initializers/switch_user.rb

config.controller_guard = lambda { |current_user, request, original_user, controller| 
    controller.admin_user_signed_in? 
} 

原拉姆达有2个参数。 只需追加更多(最多4个)并使用它。

不要忘记重新启动导轨服务器:)

+1

这应该在switch_user文档中 – 2015-12-03 18:07:39