Browse Source

FIX 后台管理修改用户信息时同步git用户

tags/v4.0.0
jasder 4 years ago
parent
commit
9f31dc02f4
5 changed files with 54 additions and 31 deletions
  1. +14
    -11
      app/controllers/admins/users_controller.rb
  2. +7
    -2
      app/models/user.rb
  3. +26
    -13
      app/services/admins/update_user_service.rb
  4. +6
    -3
      app/views/admins/users/edit.html.erb
  5. +1
    -2
      app/views/admins/users/shared/_user_list.html.erb

+ 14
- 11
app/controllers/admins/users_controller.rb View File

@@ -1,4 +1,6 @@
class Admins::UsersController < Admins::BaseController class Admins::UsersController < Admins::BaseController
before_action :finder_user, except: [:index]

def index def index
params[:sort_by] = params[:sort_by].presence || 'created_on' params[:sort_by] = params[:sort_by].presence || 'created_on'
params[:sort_direction] = params[:sort_direction].presence || 'desc' params[:sort_direction] = params[:sort_direction].presence || 'desc'
@@ -8,12 +10,9 @@ class Admins::UsersController < Admins::BaseController
end end


def edit def edit
@user = User.find(params[:id])
end end


def update def update
@user = User.find(params[:id])

Admins::UpdateUserService.call(@user, update_params) Admins::UpdateUserService.call(@user, update_params)
flash[:success] = '保存成功' flash[:success] = '保存成功'
redirect_to edit_admins_user_path(@user) redirect_to edit_admins_user_path(@user)
@@ -26,43 +25,47 @@ class Admins::UsersController < Admins::BaseController
end end


def destroy def destroy
User.find(params[:id]).destroy!
@user.destroy!
Gitea::User::DeleteService.call(@user.login)


render_delete_success render_delete_success
end end


def lock def lock
User.find(params[:id]).lock!
@user.lock!


render_ok render_ok
end end


def unlock def unlock
User.find(params[:id]).activate!
@user.activate!


render_ok render_ok
end end


def reward_grade def reward_grade
user = User.find(params[:user_id])
return render_unprocessable_entity('金币数量必须大于0') if params[:grade].to_i <= 0 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 end


def reset_login_times def reset_login_times
User.find(params[:id]).reset_login_times!
@user.reset_login_times!


render_ok render_ok
end end


private private


def finder_user
@user = User.find(params[:id])
end

def update_params def update_params
params.require(:user).permit(%i[lastname nickname gender identity technical_title student_id is_shixun_marker 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 mail phone location location_city school_id department_id admin business is_test
password professional_certification authentication])
password professional_certification authentication login])
end end
end end

+ 7
- 2
app/models/user.rb View File

@@ -116,8 +116,6 @@ class User < Owner
enumerize :platform, in: [:forge, :educoder, :trustie, :military], default: :forge, scope: :shallow enumerize :platform, in: [:forge, :educoder, :trustie, :military], default: :forge, scope: :shallow


belongs_to :laboratory, optional: true belongs_to :laboratory, optional: true
has_many :composes, dependent: :destroy
has_many :compose_users, dependent: :destroy
has_one :user_extension, dependent: :destroy has_one :user_extension, dependent: :destroy
has_many :open_users, dependent: :destroy has_many :open_users, dependent: :destroy
has_one :wechat_open_user, class_name: 'OpenUsers::Wechat' has_one :wechat_open_user, class_name: 'OpenUsers::Wechat'
@@ -434,6 +432,7 @@ class User < Owner


def activate! def activate!
update_attribute(:status, STATUS_ACTIVE) update_attribute(:status, STATUS_ACTIVE)
prohibit_gitea_user_login!(false)
end end


def register! def register!
@@ -442,6 +441,12 @@ class User < Owner


def lock! def lock!
update_attribute(:status, STATUS_LOCKED) 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 end


# 课程用户身份 # 课程用户身份


+ 26
- 13
app/services/admins/update_user_service.rb View File

@@ -15,19 +15,13 @@ class Admins::UpdateUserService < ApplicationService
user.firstname = '' user.firstname = ''
user.password = params[:password] if params[:password].present? 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) user.user_extension.assign_attributes(user_extension_attributes)


old_login = user.login
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
user.save! user.save!
user.user_extension.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 end


user user
@@ -36,7 +30,7 @@ class Admins::UpdateUserService < ApplicationService
private private


def user_attributes 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]) professional_certification authentication is_shixun_marker])
end 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]) params.slice(*%i[gender identity technical_title student_id location location_city school_id department_id])
end 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 rescue Exception => ex
Util.logger_error(ex) Util.logger_error(ex)
raise Error, '保存失败' raise Error, '保存失败'


+ 6
- 3
app/views/admins/users/edit.html.erb View File

@@ -7,8 +7,8 @@


<div class="box user-edit-container"> <div class="box user-edit-container">
<div class="user-info mb-4 row"> <div class="user-info mb-4 row">
<%= link_to "/users/#{@user.login}", class: 'user-info-avatar col-md-1', target: '_blank', data: { toggle: 'tooltip', title: '个人中心' } do %>
<img src="/images/<%= url_to_avatar(@user) %>" class="rounded-circle" width="80" height="80" />
<%= link_to "/#{@user.login}", class: 'user-info-avatar col-md-1', target: '_blank', data: { toggle: 'tooltip', title: '个人中心' } do %>
<img src="/<%= url_to_avatar(@user) %>" class="rounded-circle" width="80" height="80" />
<% end %> <% end %>
<div class="d-flex flex-column justify-content-between col-md-3 user-info-content"> <div class="d-flex flex-column justify-content-between col-md-3 user-info-content">
<div class="user-info-name flex"><%= @user.real_name %> | <%= @user.id %> | <%= @user.login %></div> <div class="user-info-name flex"><%= @user.real_name %> | <%= @user.id %> | <%= @user.login %></div>
@@ -50,6 +50,10 @@


<div><h6>基本信息</h6></div> <div><h6>基本信息</h6></div>
<div class="form-group px-2"> <div class="form-group px-2">
<div class="form-row">
<%= f.input :login, label: '登录名', wrapper_html: { class: 'col-md-3' }, input_html: { readonly: true, class: 'col-md-11', value: @user.login } %>
</div>

<div class="form-row"> <div class="form-row">
<%= f.input :lastname, label: '姓名', wrapper_html: { class: 'col-md-3' }, input_html: { class: 'col-md-11', value: @user.only_real_name } %> <%= f.input :lastname, label: '姓名', wrapper_html: { class: 'col-md-3' }, input_html: { class: 'col-md-11', value: @user.only_real_name } %>
</div> </div>
@@ -109,7 +113,6 @@
<div class="d-flex"> <div class="d-flex">
<%= f.input :professional_certification, as: :boolean, label: '职业认证', checked_value: 1, unchecked_value: 0 %> <%= f.input :professional_certification, as: :boolean, label: '职业认证', checked_value: 1, unchecked_value: 0 %>
<%= f.input :authentication, as: :boolean, label: '实名认证', wrapper_html: { class: 'ml-3' }, checked_value: 1, unchecked_value: 0 %> <%= f.input :authentication, as: :boolean, label: '实名认证', wrapper_html: { class: 'ml-3' }, checked_value: 1, unchecked_value: 0 %>
<%= f.input :is_shixun_marker, as: :boolean, label: '实训制作', wrapper_html: { class: 'ml-3' }, checked_value: 1, unchecked_value: 0 %>
</div> </div>
</div> </div>




+ 1
- 2
app/views/admins/users/shared/_user_list.html.erb View File

@@ -18,7 +18,7 @@
<tr class="user-item-<%= user.id %>"> <tr class="user-item-<%= user.id %>">
<td><%= list_index_no((params[:page] || 1).to_i, index) %></td> <td><%= list_index_no((params[:page] || 1).to_i, index) %></td>
<td class="text-left"> <td class="text-left">
<%= link_to "/users/#{user.login}", target: '_blank' do %>
<%= link_to "/#{user.login}", target: '_blank' do %>
<%= overflow_hidden_span user.real_name, width: 100 %> <%= overflow_hidden_span user.real_name, width: 100 %>
<% end %> <% end %>
</td> </td>
@@ -44,7 +44,6 @@
<div class="d-inline"> <div class="d-inline">
<%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %> <%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
<div class="dropdown-menu more-action-dropdown"> <div class="dropdown-menu more-action-dropdown">
<%= javascript_void_link('奖励', class: 'dropdown-item reward-grade-action', data: { toggle: 'modal', target: '.admin-users-reward-grade-modal', id: user.id }) %>


<%= javascript_void_link '恢复禁密账号', class: 'dropdown-item reset-login-times-action', data: { id: user.id } %> <%= javascript_void_link '恢复禁密账号', class: 'dropdown-item reset-login-times-action', data: { id: user.id } %>




Loading…
Cancel
Save