summaryrefslogtreecommitdiff
path: root/config
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 /config
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 'config')
-rw-r--r--config/locales/de.yml8
-rw-r--r--config/locales/en.yml8
-rw-r--r--config/routes.rb4
3 files changed, 19 insertions, 1 deletions
diff --git a/config/locales/de.yml b/config/locales/de.yml
index e15a08d2..8aae7ca5 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -219,6 +219,8 @@ de:
219 otp_enroll: "%{actor} hat einen zweiten Faktor eingerichtet" 219 otp_enroll: "%{actor} hat einen zweiten Faktor eingerichtet"
220 otp_disable: "%{actor} hat den zweiten Faktor entfernt" 220 otp_disable: "%{actor} hat den zweiten Faktor entfernt"
221 otp_reset: "%{actor} hat den zweiten Faktor von %{target} zurückgesetzt" 221 otp_reset: "%{actor} hat den zweiten Faktor von %{target} zurückgesetzt"
222 user_deactivate: "%{actor} hat %{target} deaktiviert"
223 user_reactivate: "%{actor} hat %{target} reaktiviert"
222 224
223 open_gallery: "Gallerie anzeigen" 225 open_gallery: "Gallerie anzeigen"
224 asset_licenses: 226 asset_licenses:
@@ -281,6 +283,9 @@ de:
281 user: 283 user:
282 confirm_destroy: "Benutzer %{login} wirklich löschen?" 284 confirm_destroy: "Benutzer %{login} wirklich löschen?"
283 no_roles: "—" 285 no_roles: "—"
286 deactivate: "Deaktivieren"
287 reactivate: "Reaktivieren"
288 confirm_deactivate: "%{login} deaktivieren? Die Anmeldung wird sofort verweigert, Zuschreibungen bleiben erhalten."
284 index: 289 index:
285 title: "Benutzerkonten" 290 title: "Benutzerkonten"
286 create_editor: "Editor-Konto anlegen" 291 create_editor: "Editor-Konto anlegen"
@@ -578,6 +583,9 @@ de:
578 created: "Benutzer %{login} angelegt" 583 created: "Benutzer %{login} angelegt"
579 updated: "Benutzer %{login} aktualisiert" 584 updated: "Benutzer %{login} aktualisiert"
580 otp_reset: "Zweiter Faktor von %{login} zurückgesetzt" 585 otp_reset: "Zweiter Faktor von %{login} zurückgesetzt"
586 deactivated: "%{login} ist jetzt alumni und kann sich nicht mehr anmelden."
587 reactivated: "%{login} kann sich wieder anmelden."
588 cannot_deactivate_self: "Das eigene Konto kann nicht deaktiviert werden."
581 assets: 589 assets:
582 created: "Asset wurde angelegt." 590 created: "Asset wurde angelegt."
583 updated: "Asset wurde aktualisiert." 591 updated: "Asset wurde aktualisiert."
diff --git a/config/locales/en.yml b/config/locales/en.yml
index f8b94a00..e434538f 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -167,6 +167,8 @@ en:
167 otp_enroll: "%{actor} set up a second factor" 167 otp_enroll: "%{actor} set up a second factor"
168 otp_disable: "%{actor} removed their second factor" 168 otp_disable: "%{actor} removed their second factor"
169 otp_reset: "%{actor} reset the second factor of %{target}" 169 otp_reset: "%{actor} reset the second factor of %{target}"
170 user_deactivate: "%{actor} deactivated %{target}"
171 user_reactivate: "%{actor} reactivated %{target}"
170 172
171 open_gallery: "Open gallery" 173 open_gallery: "Open gallery"
172 asset_licenses: 174 asset_licenses:
@@ -229,6 +231,9 @@ en:
229 user: 231 user:
230 confirm_destroy: "Do you really want to destroy user %{login}?" 232 confirm_destroy: "Do you really want to destroy user %{login}?"
231 no_roles: "—" 233 no_roles: "—"
234 deactivate: "Deactivate"
235 reactivate: "Reactivate"
236 confirm_deactivate: "Deactivate %{login}? Sign-in is refused immediately; attributions are preserved."
232 index: 237 index:
233 title: "User accounts" 238 title: "User accounts"
234 create_editor: "Create editor account" 239 create_editor: "Create editor account"
@@ -541,6 +546,9 @@ en:
541 created: "User created %{login}" 546 created: "User created %{login}"
542 updated: "Updated user %{login}" 547 updated: "Updated user %{login}"
543 otp_reset: "Second factor reset for %{login}" 548 otp_reset: "Second factor reset for %{login}"
549 deactivated: "%{login} is now an alumnus and can no longer sign in."
550 reactivated: "%{login} can sign in again."
551 cannot_deactivate_self: "You cannot deactivate your own account."
544 assets: 552 assets:
545 created: "Asset was successfully created." 553 created: "Asset was successfully created."
546 updated: "Asset was successfully updated." 554 updated: "Asset was successfully updated."
diff --git a/config/routes.rb b/config/routes.rb
index 4b5d15c9..1898dbbb 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -97,9 +97,11 @@ Cccms::Application.routes.draw do
97 match '/login' => 'sessions#new', :as => :login, :via => :get 97 match '/login' => 'sessions#new', :as => :login, :via => :get
98 match 'search' => 'search#index', :as => :search, :via => :get 98 match 'search' => 'search#index', :as => :search, :via => :get
99 99
100 resources :users do 100 resources :users, :except => :destroy do
101 member do 101 member do
102 put :reset_otp 102 put :reset_otp
103 put :deactivate
104 put :reactivate
103 end 105 end
104 end 106 end
105 resource :otp_enrollment, :only => [:show, :create, :update, :destroy] 107 resource :otp_enrollment, :only => [:show, :create, :update, :destroy]