diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-31 17:05:05 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-31 17:05:05 +0200 |
| commit | 8c6a6516e1dc5c1b4f12740a6f7b32765b530bb7 (patch) | |
| tree | e40a1da656bedef0662f0e984b4e3b00b374bc1d /config | |
| parent | 464dd4266bdc433805010b5dca428f4cb75c2a81 (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.yml | 8 | ||||
| -rw-r--r-- | config/locales/en.yml | 8 | ||||
| -rw-r--r-- | config/routes.rb | 4 |
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] |
