diff options
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/users_controller.rb | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 583ebac0..9b9d64e5 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb | |||
| @@ -5,17 +5,17 @@ class UsersController < ApplicationController | |||
| 5 | # Private | 5 | # Private |
| 6 | 6 | ||
| 7 | before_action :login_required | 7 | before_action :login_required |
| 8 | before_action :find_user, :only => [:show, :edit, :update, :reset_otp, :deactivate, :reactivate] | 8 | before_action :find_user, :only => [:show, :edit, :update, :reset_otp, :deactivate, :reactivate, :grant_redaktion, :revoke_redaktion] |
| 9 | before_action :require_admin, :only => [:index, :new, :create, :reset_otp, :deactivate, :reactivate] | 9 | before_action :require_redaktion, :only => [:index] |
| 10 | before_action :require_admin, :only => [:new, :create, :reset_otp, :deactivate, :reactivate] | ||
| 10 | before_action :require_elevation, :only => [:new, :create, :reset_otp, :deactivate, :reactivate] | 11 | before_action :require_elevation, :only => [:new, :create, :reset_otp, :deactivate, :reactivate] |
| 11 | before_action :verify_status, :except => [:index] | 12 | before_action :verify_status, :except => [:index, :grant_redaktion, :revoke_redaktion] |
| 12 | 13 | ||
| 13 | layout 'admin' | 14 | layout 'admin' |
| 14 | 15 | ||
| 15 | ROLE_PRESETS = { | 16 | ROLE_PRESETS = { |
| 16 | "editor" => [], | 17 | "editor" => [], |
| 17 | "redaktion" => ["redaktion"], | 18 | "redaktion" => ["redaktion"], |
| 18 | "admin" => ["admin", "redaktion"] | ||
| 19 | }.freeze | 19 | }.freeze |
| 20 | 20 | ||
| 21 | GROUP_ORDER = [:admin, :redaktion, :editor, :alumni].freeze | 21 | GROUP_ORDER = [:admin, :redaktion, :editor, :alumni].freeze |
| @@ -74,6 +74,28 @@ class UsersController < ApplicationController | |||
| 74 | redirect_to users_path | 74 | redirect_to users_path |
| 75 | end | 75 | end |
| 76 | 76 | ||
| 77 | def grant_redaktion | ||
| 78 | return deny_role_access(:redaktion_required) unless current_user.redaktion? | ||
| 79 | |||
| 80 | case @user.grant_redaktion!(:actor => current_user) | ||
| 81 | when :granted then flash[:notice] = t("flash.users.redaktion_granted", :login => @user.login) | ||
| 82 | when :no_second_factor then flash[:error] = t("flash.users.redaktion_needs_otp", :login => @user.login) | ||
| 83 | end | ||
| 84 | |||
| 85 | redirect_to users_path | ||
| 86 | end | ||
| 87 | |||
| 88 | def revoke_redaktion | ||
| 89 | return deny_role_access(:redaktion_required) unless current_user.redaktion? | ||
| 90 | |||
| 91 | case @user.revoke_redaktion!(:actor => current_user) | ||
| 92 | when :revoked then flash[:notice] = t("flash.users.redaktion_revoked", :login => @user.login) | ||
| 93 | when :self then flash[:error] = t("flash.users.redaktion_not_self") | ||
| 94 | end | ||
| 95 | |||
| 96 | redirect_to users_path | ||
| 97 | end | ||
| 98 | |||
| 77 | def reset_otp | 99 | def reset_otp |
| 78 | @user.disable_otp!(:actor => current_user) | 100 | @user.disable_otp!(:actor => current_user) |
| 79 | flash[:notice] = t("flash.users.otp_reset", :login => @user.login) | 101 | flash[:notice] = t("flash.users.otp_reset", :login => @user.login) |
