diff options
Diffstat (limited to 'app/controllers/users_controller.rb')
| -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 | ||
