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 %>
<% if !session[:original_user_id] && admin? %> - <%= link_to "become this user", become_user_path(@user), :class => "btn blue" %> + <%= link_to "become this user", become_path(user: @user), :class => "btn blue" %> <% elsif session[:original_user_id] %> - <%= link_to "revert", unbecome_users_path, :class => "btn blue" %> + <%= link_to "revert", revert_path, :class => "btn blue" %> <% end %>
diff --git a/config/routes.rb b/config/routes.rb index 9b16a5c..7cac940 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -4,7 +4,7 @@ Site::Application.routes.draw do resources :comments end - resources :statics, only: [:index, :donate], path: '' do + resources :statics, only: [:index, :donate], path: '/' do collection do get 'donate' get 'index' @@ -15,26 +15,24 @@ Site::Application.routes.draw do resources :users do member do - get 'become' get 'confirm' end - collection do - get 'unbecome' - end end - resources :forumgroups, path: 'forums/groups' - resources :forums, path: 'forums' + resources :forumgroups, path: '/forums/groups' + resources :forums, path: '/forums' resources :forumthreads, path: '/forums/threads' do - resources :threadreplies, path: '/forums/threads/replies' + resources :threadreplies, path: 'replies' end # get '/status' => 'status#show' - get 'login' => 'sessions#new' - post 'login' => 'sessions#create' - get "logout" => 'sessions#destroy' - get 'signup' => 'users#new' + get 'login' => 'sessions#new' + post 'login' => 'sessions#create' + get 'become' => 'sessions#become' + get 'revert' => 'sessions#revert' + get 'logout' => 'sessions#destroy' + get 'signup' => 'users#new' # post 'paypal' => 'paypal#create'