summaryrefslogtreecommitdiff
path: root/app/controllers/users_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/users_controller.rb')
-rw-r--r--app/controllers/users_controller.rb20
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