summaryrefslogtreecommitdiff
path: root/app/controllers/admin/impersonation_controller.rb
blob: 0382402afa6432de55f9c14e4b0a13dd825f5e88 (plain)
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
29
30
31
32
class Admin::ImpersonationController < Admin::ApplicationController
  skip_before_action :authenticate_admin!, only: :destroy

  before_action :user
  before_action :authorize_impersonator!

  def create
    session[:impersonator_id] = current_user.username
    session[:impersonator_return_to] = request.env['HTTP_REFERER']

    warden.set_user(user, scope: 'user')

    flash[:alert] = "You are impersonating #{user.username}."

    redirect_to root_path
  end

  def destroy
    redirect = session[:impersonator_return_to]

    warden.set_user(user, scope: 'user')

    session[:impersonator_return_to] = nil
    session[:impersonator_id] = nil

    redirect_to redirect || root_path
  end

  def user
    @user ||= User.find_by!(username: params[:id] || session[:impersonator_id])
  end
end