2012-01-02 35 views
9

Tôi đang cố gắng triển khai switch_user đá quý trong ứng dụng đường ray hiện có của tôi 3.0.9. Có hai mô hình trên ứng dụng của tôi, họ làĐăng nhập vào tài khoản của người dùng khác bằng Devise + Active Admin + Người dùng chuyển đổi

  1. tài - cho các tài khoản khách hàng của tôi và nó has_oneTài khoản
  2. AdminUser - Điều này đã được tạo ra bởi ActiveAdmin

Tôi đã bật xác thực xác minh cho Users và ActiveAdmin cũng hoạt động khá tốt với AdminUser. Giờ đây, từ giao diện Quản trị viên hoạt động của tôi, tôi muốn chọn Tài khoản và đăng nhập vào các tài khoản đó giống như chủ sở hữu tài khoản. Chuyển đổi người dùng đang làm việc tốt nhưng vấn đề là bất cứ ai có thể chỉ cần đăng nhập vào tài khoản người dùng ngay bây giờ nếu họ biết các url.

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

Tất cả tôi cần là chỉ cho phép một AdminUser (nghĩa là nếu có một phiên ActiveAdmin) để truy cập vào tài khoản của người dùng.

Đây là cách /config/initializers/switch_user.rb của tôi trông giống như

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

Nhưng tôi nhận được lỗi này

NameError in SwitchUserController#set_current_user 

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

Liệu có cách nào tôi có thể truy cập vào tài quản trị hoạt động?

Mã cho /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 

btw trong điều khiển ứng dụng của tôi, tôi đã không được tạo ra bất kỳ phương pháp cho authenticate_admin_user, current_admin_user quản trị tích cực hoạt động tốt mà không có họ.

+0

Tôi đã thử gần như tất cả mọi thứ tôi có thể nghĩ nhưng vẫn không có may mắn. bất cứ ai khác xin vui lòng? – randika

Trả lời

2

OK Tôi nghĩ mình đã tìm được giải pháp để bảo đảm an toàn switch_user. Tất cả tôi đã làm được việc di chuyển các tuyến đường bên trong admin_users phạm vi

ActiveAdmin.routes(self) 

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

Tôi dường như không làm được điều này. Tôi thậm chí không thấy lộ trình khi tôi cào các tuyến đường. Bạn đã thử điều này trên phiên bản mới hơn của activeadmin chưa? – meatherly

6

Bạn cần sửa đổi địa phương config/initializers/switch_user.rb:

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

gốc lambda có 2 đối số. Chỉ cần nối thêm (tối đa 4) và sử dụng nó.

Đừng quên khởi động lại máy chủ đường ray :)

+1

Điều này phải có trong tài liệu switch_user –

Các vấn đề liên quan