123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- class Admin::UsersController < ApplicationController
- before_action :authenticate_admin!, except: [:switch_back]
- before_action :find_user, only: [:edit, :destroy, :update, :deactivate, :activate, :switch_to_user]
- helper_method :resource
- def index
- @users = User.reorder('created_at DESC').page(params[:page])
- respond_to do |format|
- format.html
- format.json { render json: @users }
- end
- end
- def new
- @user = User.new
- end
- def create
- @user = User.new(user_params)
- @user.requires_no_invitation_code!
- respond_to do |format|
- if @user.save
- DefaultScenarioImporter.import(@user)
- format.html { redirect_to admin_users_path, notice: "User '#{@user.username}' was successfully created." }
- format.json { render json: @user, status: :ok, location: admin_users_path(@user) }
- else
- format.html { render action: 'new' }
- format.json { render json: @user.errors, status: :unprocessable_entity }
- end
- end
- end
- def edit
- end
- def update
- params[:user].extract!(:password, :password_confirmation) if params[:user][:password].blank?
- @user.assign_attributes(user_params)
- respond_to do |format|
- if @user.save
- format.html { redirect_to admin_users_path, notice: "User '#{@user.username}' was successfully updated." }
- format.json { render json: @user, status: :ok, location: admin_users_path(@user) }
- else
- format.html { render action: 'edit' }
- format.json { render json: @user.errors, status: :unprocessable_entity }
- end
- end
- end
- def destroy
- @user.destroy
- respond_to do |format|
- format.html { redirect_to admin_users_path, notice: "User '#{@user.username}' was deleted." }
- format.json { head :no_content }
- end
- end
- def deactivate
- @user.deactivate!
- respond_to do |format|
- format.html { redirect_to admin_users_path, notice: "User '#{@user.username}' was deactivated." }
- format.json { render json: @user, status: :ok, location: admin_users_path(@user) }
- end
- end
- def activate
- @user.activate!
- respond_to do |format|
- format.html { redirect_to admin_users_path, notice: "User '#{@user.username}' was activated." }
- format.json { render json: @user, status: :ok, location: admin_users_path(@user) }
- end
- end
- # allow an admin to sign-in as any other user
- def switch_to_user
- if current_user != @user
- old_user = current_user
- bypass_sign_in(@user)
- session[:original_admin_user_id] = old_user.id
- end
- redirect_to agents_path
- end
- def switch_back
- if session[:original_admin_user_id].present?
- bypass_sign_in(User.find(session[:original_admin_user_id]))
- session.delete(:original_admin_user_id)
- else
- redirect_to(root_path, alert: 'You must be an admin acting as a different user to do that.') and return
- end
- redirect_to admin_users_path
- end
- private
- def user_params
- params.require(:user).permit(:email, :username, :password, :password_confirmation, :admin)
- end
- def find_user
- @user = User.find(params[:id])
- end
- def resource
- @user
- end
- end
|