Merge pull request '组织权限修复,以及一些错误数据修复脚本' (#127) from yystopf/forgeplus:hh_team_unit into develop

This commit is contained in:
jasder 2021-08-27 15:10:36 +08:00
commit b9bf3fb5ff
14 changed files with 87 additions and 12 deletions

View File

@ -29,6 +29,11 @@ class Organizations::TeamUsersController < Organizations::BaseController
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
@team_user.destroy! @team_user.destroy!
Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, @operate_user.login) Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, @operate_user.login)
org_team_users = @organization.team_users.where(user_id: @operate_user.id)
unless org_team_users.present?
@organization.organization_users.find_by(user_id: @operate_user.id).destroy!
Gitea::Organization::OrganizationUser::DeleteService.call(@organization.gitea_token, @organization.login, @operate_user.login)
end
render_ok render_ok
end end
rescue Exception => e rescue Exception => e
@ -43,6 +48,11 @@ class Organizations::TeamUsersController < Organizations::BaseController
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
@team_user.destroy! @team_user.destroy!
Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, current_user.login) Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, current_user.login)
org_team_users = @organization.team_users.where(user_id: current_user.id)
unless org_team_users.present?
@organization.organization_users.find_by(user_id: current_user.id).destroy!
Gitea::Organization::OrganizationUser::DeleteService.call(@organization.gitea_token, @organization.login, current_user.login)
end
render_ok render_ok
end end
rescue Exception => e rescue Exception => e

View File

@ -14,7 +14,7 @@ class Projects::TeamsController < Projects::BaseController
def create def create
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
@team_project = TeamProject.build(@owner.id, @operate_team.id, @project.id) @team_project = TeamProject.build(@owner.id, @operate_team.id, @project.id)
Gitea::Organization::TeamProject::CreateService.call(@owner.gitea_token, @operate_team.gtid, @owner.login, @project.identifier) Gitea::Organization::TeamProject::CreateService.call(current_user.gitea_token, @operate_team.gtid, @owner.login, @project.identifier)
render_ok render_ok
end end
rescue Exception => e rescue Exception => e
@ -25,7 +25,7 @@ class Projects::TeamsController < Projects::BaseController
def destroy def destroy
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
@team_project.destroy! @team_project.destroy!
Gitea::Organization::TeamProject::DeleteService.call(@owner.gitea_token, @operate_team.gtid, @owner.login, @project.identifier) Gitea::Organization::TeamProject::DeleteService.call(current_user.gitea_token, @operate_team.gtid, @owner.login, @project.identifier)
render_ok render_ok
end end
rescue Exception => e rescue Exception => e

View File

@ -19,6 +19,7 @@ class PullRequestsController < ApplicationController
@close_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::CLOSED}) @close_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::CLOSED})
@merged_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::MERGED}) @merged_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::MERGED})
@user_admin_or_member = current_user.present? && (current_user.admin || @project.member?(current_user)) @user_admin_or_member = current_user.present? && (current_user.admin || @project.member?(current_user))
@user_admin_or_developer = current_user.present? && (current_user.admin || @project.all_developers.include?(current_user))
scopes = Issues::ListQueryService.call(issues,params.delete_if{|k,v| v.blank?}, "PullRequest") scopes = Issues::ListQueryService.call(issues,params.delete_if{|k,v| v.blank?}, "PullRequest")
@issues_size = scopes.size @issues_size = scopes.size

View File

@ -5,7 +5,7 @@ class Users::BaseController < ApplicationController
helper_method :observed_logged_user?, :observed_user helper_method :observed_logged_user?, :observed_user
def observed_user def observed_user
@_observed_user ||= (User.find_by_id(params[:user_id]) || User.find_by_login(params[:user_id])) @_observed_user ||= (User.find_by_login(params[:user_id]) || User.find_by_id(params[:user_id]))
end end
def observed_logged_user? def observed_logged_user?

View File

@ -31,7 +31,7 @@ class Team < ApplicationRecord
validates :name, uniqueness: {scope: :organization_id} validates :name, uniqueness: {scope: :organization_id}
enum authorize: {common: 0, read: 1, write: 2, admin: 3, owner: 4} enum authorize: {read: 1, write: 2, admin: 3, owner: 4}
def self.build(organization_id, name, nickname, description, authorize, includes_all_project, can_create_org_project) def self.build(organization_id, name, nickname, description, authorize, includes_all_project, can_create_org_project)
self.create!(organization_id: organization_id, self.create!(organization_id: organization_id,

View File

@ -20,7 +20,7 @@ class TeamUnit < ApplicationRecord
belongs_to :organization belongs_to :organization
belongs_to :team belongs_to :team
enum unit_type: {code: 1, issues: 2, pulls: 3, releases: 4} enum unit_type: {code: 1, issues: 2, pulls: 3, wiki: 4, releases: 5}
validates :unit_type, uniqueness: { scope: [:organization_id, :team_id]} validates :unit_type, uniqueness: { scope: [:organization_id, :team_id]}

View File

@ -37,7 +37,7 @@ class Organizations::Teams::CreateService < ApplicationService
end end
def authorize def authorize
params[:authorize].present? ? params[:authorize] : "common" params[:authorize].present? ? params[:authorize] : "read"
end end
def includes_all_project def includes_all_project
@ -54,7 +54,7 @@ class Organizations::Teams::CreateService < ApplicationService
end end
def units_params def units_params
%w(admin owner).include?(authorize) ? %w(code issues pulls releases) : params[:unit_types] %w(code issues pulls wiki releases)
end end
def create_units def create_units

View File

@ -33,7 +33,7 @@ class Organizations::Teams::UpdateService < ApplicationService
end end
def units_params def units_params
%w(admin owner).include?(team.authorize) ? %w(code issues pulls releases) : params[:unit_types] %w(code issues pulls wiki releases)
end end
def update_team(update_params) def update_team(update_params)

View File

@ -30,7 +30,7 @@ class Projects::ApplyTransferService < ApplicationService
def is_permit_owner def is_permit_owner
return true unless @owner.is_a?(Organization) return true unless @owner.is_a?(Organization)
return @owner.is_owner?(@user) return @owner.is_admin?(@user)
end end
def create_apply def create_apply

View File

@ -23,12 +23,12 @@ class Projects::TransferService < ApplicationService
private private
def update_owner def update_owner
project.members.find_by(user_id: owner.id).destroy! if owner.is_a?(User) project.members.map{|m| m.destroy! if m.user_id == owner.id || (new_owner.is_a?(Organization) && new_owner.is_member?(m.user_id)) }
project.update!(user_id: new_owner.id) project.update!(user_id: new_owner.id)
end end
def update_repo_url def update_repo_url
project.repository.update!(url: @gitea_repo["clone_url"]) project.repository.update!(user_id: new_owner.id, url: @gitea_repo["clone_url"])
end end
def update_visit_teams def update_visit_teams

View File

@ -2,6 +2,7 @@ json.total_count @owners.size
json.owners @owners.each do |owner| json.owners @owners.each do |owner|
json.id owner.id json.id owner.id
json.type owner.type json.type owner.type
json.login owner.login
json.name owner&.show_real_name json.name owner&.show_real_name
json.avatar_url url_to_avatar(owner) json.avatar_url url_to_avatar(owner)
end end

View File

@ -1,5 +1,6 @@
json.total_count @teams.total_count json.total_count @teams.total_count
json.can_add @owner.is_owner?(current_user.id) || @owner&.repo_admin_change_team_access
json.teams @teams.each do |team| json.teams @teams.each do |team|
json.(team, :id, :name, :authorize) json.(team, :id, :name, :authorize)
json.can_remove !team.includes_all_project && team&.organization&.repo_admin_change_team_access json.can_remove !team.includes_all_project && (@owner.is_owner?(current_user.id) || team&.organization&.repo_admin_change_team_access)
end end

View File

@ -5,6 +5,7 @@ json.merged_issues_size @merged_issues.size
json.search_count @issues_size json.search_count @issues_size
json.limit @limit json.limit @limit
json.user_admin_or_member @user_admin_or_member json.user_admin_or_member @user_admin_or_member
json.user_admin_or_developer @user_admin_or_developer
json.project_name @project.name json.project_name @project.name
json.project_author_name @project.owner.try(:login) json.project_author_name @project.owner.try(:login)

View File

@ -0,0 +1,61 @@
desc "Fix Some Unstep Data"
namespace :fix_some_error_data do
task org_member_and_project_member: :environment do
puts "======Begin: fix organization memberr======"
fix_org_count = 0
OrganizationUser.find_each do |org_user|
org = org_user.organization
if org.team_users.where(user_id: org_user.user_id).blank?
Gitea::Organization::OrganizationUser::DeleteService.call(org_user.organization.gitea_token, org_user.organization.login, org_user&.user&.login)
org_user.destroy
fix_org_count += 1
end
end
puts "======Count: #{fix_org_count}======"
puts "======End: fix organization member and project member======"
puts "======Begin: fix project member======"
fix_pro_count = 0
Member.joins(project: :owner).where(users: {type: 'Organization'}).find_each do |member|
if member.project.owner.team_users.where(user_id: member.user_id).blank?
next
else
member.destroy
fix_pro_count += 1
end
end
puts "======Count: #{fix_pro_count}======"
puts "======End: fix project member======"
end
task open_full_gitea_team_authorize: :environment do
puts "======Begin: fix open full team authorize======"
team_count = 0
Team.find_each do |team|
team.team_units.destroy_all
%w(code issues pulls wiki releases).each do |unit|
TeamUnit.build(team.organization_id, team.id, unit)
end
Gitea::Organization::Team::UpdateService.call(team&.organization&.gitea_token, team)
team_count += 1
end
puts "======Count: #{team_count}======"
puts "======End: fix open full team authorize======"
end
task transfer_repository_user_id: :environment do
puts "======Begin: fix open full team authorize======"
repo_count = 0
AppliedTransferProject.find_each do |transfer|
next unless transfer.project.present?
next unless transfer.project.repository.present?
if transfer.project.user_id != transfer.project.repository.user_id
transfer.project.repository.update(user_id: transfer.project.user_id)
repo_count += 1
end
end
puts "======Count: #{repo_count}======"
puts "======End: fix open full team authorize======"
end
end