Module: Effective::ImpersonationController::Impersonate

Extended by:
ActiveSupport::Concern
Defined in:
app/controllers/concerns/effective/impersonation_controller/impersonate.rb

Instance Method Summary collapse

Instance Method Details

#after_impersonate_path_for(user) ⇒ Object



33
34
35
# File 'app/controllers/concerns/effective/impersonation_controller/impersonate.rb', line 33

def after_impersonate_path_for(user)
  try(:dashboard_path) || try(:root_path) || '/'
end

#impersonateObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/controllers/concerns/effective/impersonation_controller/impersonate.rb', line 10

def impersonate
  @user = current_user.class.find(params[:id])
  redirect_path = after_impersonate_path_for(@user)

  authorize! :impersonate, @user

  if defined?(EffectiveLogger)
    EffectiveLogger.info "Started impersonation of #{@user}", user: current_user, associated: @user
  end

  # Impersonate
  session[:impersonation_user_id] = current_user.id
  session[:impersonation_user_class_name] = current_user.class.name
  session[:impersonation_original_path] = request.referer.presence || '/admin/users'

  expire_data_after_sign_in!
  warden.session_serializer.store(@user, Devise::Mapping.find_scope!(@user))

  @user.touch

  redirect_to(redirect_path)
end