impersonations_controller.rb 654 Bytes
Newer Older
Douwe Maan's avatar
Douwe Maan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
class Admin::ImpersonationsController < Admin::ApplicationController
  skip_before_action :authenticate_admin!
  before_action :authenticate_impersonator!

  def destroy
    redirect_path = admin_user_path(current_user)

    warden.set_user(impersonator, scope: :user)

    session[:impersonator_id] = nil

    redirect_to redirect_path
  end

  private

  def user
    @user ||= User.find(params[:id])
  end

  def impersonator
    @impersonator ||= User.find(session[:impersonator_id]) if session[:impersonator_id]
  end

  def authenticate_impersonator!
    render_404 unless impersonator && impersonator.is_admin? && !impersonator.blocked?
  end
end