diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-08-04 05:40:54 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-08-04 05:40:54 +0200 |
| commit | 974062f16169f6d07f2289564be6d72610b8770e (patch) | |
| tree | b18f297a9d4326a3ce36f5192fbc4992fcb28e7d /app/controllers | |
| parent | be2cdea85177ac016e56dcce6cbe6015d754adf5 (diff) | |
Witness every promotion and demotion made through the roles form
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/users_controller.rb | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1bd436e5..b06d11fd 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb | |||
| @@ -50,12 +50,26 @@ class UsersController < ApplicationController | |||
| 50 | end | 50 | end |
| 51 | 51 | ||
| 52 | permitted = user_params | 52 | permitted = user_params |
| 53 | desired = permitted.key?(:roles) ? permitted.delete(:roles) : nil | ||
| 54 | refusals = [] | ||
| 55 | saved = false | ||
| 53 | 56 | ||
| 54 | if @user.update(permitted) | 57 | User.transaction do |
| 58 | saved = @user.update(permitted) | ||
| 59 | raise ActiveRecord::Rollback unless saved | ||
| 60 | |||
| 61 | refusals = desired ? @user.update_roles!(desired, :actor => current_user) : [] | ||
| 62 | raise ActiveRecord::Rollback if refusals.any? | ||
| 63 | end | ||
| 64 | |||
| 65 | if !saved | ||
| 66 | render :edit | ||
| 67 | elsif refusals.any? | ||
| 68 | flash.now[:error] = refusals.map { |r| t("flash.users.#{r}", :login => @user.login) }.to_sentence | ||
| 69 | render :edit | ||
| 70 | else | ||
| 55 | flash[:notice] = t("flash.users.updated", :login => @user.login) | 71 | flash[:notice] = t("flash.users.updated", :login => @user.login) |
| 56 | redirect_to user_path(@user) | 72 | redirect_to user_path(@user) |
| 57 | else | ||
| 58 | render :edit | ||
| 59 | end | 73 | end |
| 60 | end | 74 | end |
| 61 | 75 | ||
