2012-01-02 147 views
9

我試圖在我現有的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

回答

2

好的我想我找到了一個解決方案來保護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

6

內部路由需要修改本地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

相關問題