diff --git a/app/controllers/admins/users_controller.rb b/app/controllers/admins/users_controller.rb index 98f0a6bfb..07ea8261e 100644 --- a/app/controllers/admins/users_controller.rb +++ b/app/controllers/admins/users_controller.rb @@ -1,4 +1,6 @@ class Admins::UsersController < Admins::BaseController + before_action :finder_user, except: [:index] + def index params[:sort_by] = params[:sort_by].presence || 'created_on' params[:sort_direction] = params[:sort_direction].presence || 'desc' @@ -8,12 +10,9 @@ class Admins::UsersController < Admins::BaseController end def edit - @user = User.find(params[:id]) end def update - @user = User.find(params[:id]) - Admins::UpdateUserService.call(@user, update_params) flash[:success] = '保存成功' redirect_to edit_admins_user_path(@user) @@ -26,43 +25,47 @@ class Admins::UsersController < Admins::BaseController end def destroy - User.find(params[:id]).destroy! + @user.destroy! + Gitea::User::DeleteService.call(@user.login) render_delete_success end def lock - User.find(params[:id]).lock! + @user.lock! render_ok end def unlock - User.find(params[:id]).activate! + @user.activate! render_ok end def reward_grade - user = User.find(params[:user_id]) return render_unprocessable_entity('金币数量必须大于0') if params[:grade].to_i <= 0 - RewardGradeService.call(user, container_id: user.id, container_type: 'Feedback', score: params[:grade].to_i, not_unique: true) + RewardGradeService.call(@user, container_id: @user.id, container_type: 'Feedback', score: params[:grade].to_i, not_unique: true) - render_ok(grade: user.grade) + render_ok(grade: @user.grade) end def reset_login_times - User.find(params[:id]).reset_login_times! + @user.reset_login_times! render_ok end private + def finder_user + @user = User.find(params[:id]) + end + def update_params params.require(:user).permit(%i[lastname nickname gender identity technical_title student_id is_shixun_marker mail phone location location_city school_id department_id admin business is_test - password professional_certification authentication]) + password professional_certification authentication login]) end end diff --git a/app/models/user.rb b/app/models/user.rb index 8bdb8bfa6..dcefa8aaa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -116,8 +116,6 @@ class User < Owner enumerize :platform, in: [:forge, :educoder, :trustie, :military], default: :forge, scope: :shallow belongs_to :laboratory, optional: true - has_many :composes, dependent: :destroy - has_many :compose_users, dependent: :destroy has_one :user_extension, dependent: :destroy has_many :open_users, dependent: :destroy has_one :wechat_open_user, class_name: 'OpenUsers::Wechat' @@ -434,6 +432,7 @@ class User < Owner def activate! update_attribute(:status, STATUS_ACTIVE) + prohibit_gitea_user_login!(false) end def register! @@ -442,6 +441,12 @@ class User < Owner def lock! update_attribute(:status, STATUS_LOCKED) + prohibit_gitea_user_login! + end + + def prohibit_gitea_user_login!(prohibit_login = true) + Gitea::User::UpdateInteractor.call(self.login, + {email: self.mail, prohibit_login: prohibit_login}) end # 课程用户身份 diff --git a/app/services/admins/update_user_service.rb b/app/services/admins/update_user_service.rb index 6b1c0c857..34f704cbe 100644 --- a/app/services/admins/update_user_service.rb +++ b/app/services/admins/update_user_service.rb @@ -15,19 +15,13 @@ class Admins::UpdateUserService < ApplicationService user.firstname = '' user.password = params[:password] if params[:password].present? - if params[:identity].to_s == 'student' - params[:technical_title] = nil - else - params[:student_id] = nil - end user.user_extension.assign_attributes(user_extension_attributes) + old_login = user.login ActiveRecord::Base.transaction do user.save! user.user_extension.save! - user.update!(is_shixun_marker: true) if user.is_certification_teacher - - update_gitlab_password if params[:password].present? + update_gitea_user(old_login) end user @@ -36,7 +30,7 @@ class Admins::UpdateUserService < ApplicationService private def user_attributes - params.slice(*%i[lastname nickname mail phone admin business is_test + params.slice(*%i[lastname nickname mail phone admin business is_test login professional_certification authentication is_shixun_marker]) end @@ -44,10 +38,29 @@ class Admins::UpdateUserService < ApplicationService params.slice(*%i[gender identity technical_title student_id location location_city school_id department_id]) end - def update_gitlab_password - return if user.gid.blank? - # 同步修改gitlab密码 - Gitlab.client.edit_user(user.gid, password: params[:password]) + def gitea_user_params + hash = { + password: params[:password].to_s.presence, + email: user.mail, + login_name: params[:login].to_s.presence, + admin: boolean_admin + }.compact + + hash.delete_if {|_,v| v.to_s.strip == ''} + end + + def boolean_admin + admin = params[:admin].to_s.presence + case admin + when "0" then false + when "1" then true + end + end + + def update_gitea_user(old_login) + return if user.gitea_uid.blank? + + Gitea::User::UpdateInteractor.call(old_login, gitea_user_params) rescue Exception => ex Util.logger_error(ex) raise Error, '保存失败' diff --git a/app/views/admins/users/edit.html.erb b/app/views/admins/users/edit.html.erb index 5abc82711..44d524997 100644 --- a/app/views/admins/users/edit.html.erb +++ b/app/views/admins/users/edit.html.erb @@ -7,8 +7,8 @@
- <%= link_to "/users/#{@user.login}", class: 'user-info-avatar col-md-1', target: '_blank', data: { toggle: 'tooltip', title: '个人中心' } do %> - + <%= link_to "/#{@user.login}", class: 'user-info-avatar col-md-1', target: '_blank', data: { toggle: 'tooltip', title: '个人中心' } do %> + <% end %>