diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index ed79671..3bf2691 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -39,7 +39,50 @@ class SessionsController < ApplicationController end def destroy - session.delete(:user_id) - redirect_to login_path, :notice => "Logged out!" + if original_user = User.find_by_id(session[:original_user_id]) + logout_user = current_user + session[:user_id] = original_user.try(:id) + session.delete(:original_user_id) + flash[:notice] = "You are no longer #{logout_user.name}!" + redirect_to original_user + else + session.delete(:user_id) + redirect_to login_path, :notice => "Logged out!" + end + end + + def become + original_user = current_user + new_user = User.find_by_id(params[:user]) + if original_user && new_user && admin? && current_user.role >= new_user.role + if original_user == new_user + flash[:alert] = "You are already \"#{new_user.name}\"!" + else + if session[:original_user_id] + flash[:alert] = "Please revert to your account first" + else + session[:original_user_id] = original_user.id + session[:user_id] = new_user.id + flash[:notice] = "You are now \"#{new_user.name}\"!" + end + end + else + flash[:alert] = "You are not allowed to become this user" + end + redirect_to new_user + end + + def revert + if old_user = current_user + original_user = User.find_by_id(session[:original_user_id]) + if original_user && original_user.try(:admin?) + session.delete(:original_user_id) + session[:user_id] = original_user.try(:id) + flash[:notice] = "You are no longer '#{old_user.name}'!" + end + redirect_to old_user + else + redirect_to login_path + end end end \ No newline at end of file diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index b243fc8..4c20bdf 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -200,36 +200,6 @@ class UsersController < ApplicationController end end - def become - original_user = current_user - new_user = User.find(params[:id]) - if admin? && current_user.role >= new_user.role - if original_user == new_user - flash[:alert] = "You are already \"#{new_user.name}\"!" - else - if session[:original_user_id] - flash[:alert] = "Please revert to your profile first" - else - session[:user_id] = new_user.id - session[:original_user_id] = original_user.id - flash[:notice] = "You are now \"#{new_user.name}\"!" - end - end - end - redirect_to new_user - end - - def unbecome - old_user = current_user - original_user = User.find(session[:original_user_id]) - if old_user && original_user && original_user.admin? - session.delete(:original_user_id) - session[:user_id] = original_user.id - flash[:notice] = "You are no longer '#{old_user.name}'!" - end - redirect_to old_user - end - private diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index c6d76a1..79be9df 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -6,9 +6,9 @@ <% end %>