summaryrefslogtreecommitdiff
path: root/app/controllers/users_controller.rb
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-07-31 17:05:05 +0200
committererdgeist <erdgeist@erdgeist.org>2026-07-31 17:05:05 +0200
commit8c6a6516e1dc5c1b4f12740a6f7b32765b530bb7 (patch)
treee40a1da656bedef0662f0e984b4e3b00b374bc1d /app/controllers/users_controller.rb
parent464dd4266bdc433805010b5dca428f4cb75c2a81 (diff)
Replace user deletion with deactivation
Deactivation adds the alumni role and leaves the others in place, so reactivation is lossless and nobody has to remember what an account held. login_from_session checks alumni? on every request, so a signed-in user is locked out on their next one without any session invalidation. Guards prevent deactivating yourself or the last active admin, and both verbs are witnessed in the action log.
Diffstat (limited to 'app/controllers/users_controller.rb')
-rw-r--r--app/controllers/users_controller.rb23
1 files changed, 20 insertions, 3 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 95dff220..7bf23f17 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -4,7 +4,7 @@ class UsersController < ApplicationController
4 # Private 4 # Private
5 5
6 before_action :login_required 6 before_action :login_required
7 before_action :find_user, :only => [:show, :edit, :update, :destroy, :reset_otp] 7 before_action :find_user, :only => [:show, :edit, :update, :reset_otp, :deactivate, :reactivate]
8 before_action :verify_status, :except => [:index, :show] 8 before_action :verify_status, :except => [:index, :show]
9 9
10 layout 'admin' 10 layout 'admin'
@@ -53,8 +53,25 @@ class UsersController < ApplicationController
53 def show 53 def show
54 end 54 end
55 55
56 def destroy 56 def deactivate
57 @user.destroy if @user 57 return deny_user_access unless current_user.is_admin?
58
59 if @user == current_user
60 flash[:error] = t("flash.users.cannot_deactivate_self")
61 elsif @user.deactivate!(:actor => current_user)
62 flash[:notice] = t("flash.users.deactivated", :login => @user.login)
63 end
64
65 redirect_to users_path
66 end
67
68 def reactivate
69 return deny_user_access unless current_user.is_admin?
70
71 if @user.reactivate!(:actor => current_user)
72 flash[:notice] = t("flash.users.reactivated", :login => @user.login)
73 end
74
58 redirect_to users_path 75 redirect_to users_path
59 end 76 end
60 77