From 43add36d2974ca4ab4cb19ba74737700ddf9d2bd Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 24 Aug 2021 18:30:58 +0800 Subject: [PATCH 01/12] add: team unit add type wiki --- app/models/team.rb | 2 +- app/models/team_unit.rb | 2 +- app/services/organizations/teams/create_service.rb | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/team.rb b/app/models/team.rb index c25963905..72df05097 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -31,7 +31,7 @@ class Team < ApplicationRecord 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) self.create!(organization_id: organization_id, diff --git a/app/models/team_unit.rb b/app/models/team_unit.rb index c757cc684..fdd1b975b 100644 --- a/app/models/team_unit.rb +++ b/app/models/team_unit.rb @@ -20,7 +20,7 @@ class TeamUnit < ApplicationRecord belongs_to :organization 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]} diff --git a/app/services/organizations/teams/create_service.rb b/app/services/organizations/teams/create_service.rb index c3fc5f599..3aeb23db5 100644 --- a/app/services/organizations/teams/create_service.rb +++ b/app/services/organizations/teams/create_service.rb @@ -37,7 +37,7 @@ class Organizations::Teams::CreateService < ApplicationService end def authorize - params[:authorize].present? ? params[:authorize] : "common" + params[:authorize].present? ? params[:authorize] : "read" end def includes_all_project @@ -54,7 +54,7 @@ class Organizations::Teams::CreateService < ApplicationService end def units_params - %w(admin owner).include?(authorize) ? %w(code issues pulls releases) : params[:unit_types] + %w(admin owner).include?(authorize) ? %w(code issues pulls wiki releases) : params[:unit_types] end def create_units From 68712f9b4c1cd3fcdce9922e3ebe76a2447b4c83 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 25 Aug 2021 15:25:08 +0800 Subject: [PATCH 02/12] add: project team can add authorize --- app/views/projects/teams/index.json.jbuilder | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/projects/teams/index.json.jbuilder b/app/views/projects/teams/index.json.jbuilder index 0a48e884d..0b74a37a4 100644 --- a/app/views/projects/teams/index.json.jbuilder +++ b/app/views/projects/teams/index.json.jbuilder @@ -1,5 +1,6 @@ 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.(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 \ No newline at end of file From f03182c7713df7afcac08d7939c6b078cdb9b24e Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 25 Aug 2021 15:28:21 +0800 Subject: [PATCH 03/12] fix --- app/controllers/projects/teams_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/projects/teams_controller.rb b/app/controllers/projects/teams_controller.rb index b6ea32185..3ffc78001 100644 --- a/app/controllers/projects/teams_controller.rb +++ b/app/controllers/projects/teams_controller.rb @@ -14,7 +14,7 @@ class Projects::TeamsController < Projects::BaseController def create ActiveRecord::Base.transaction do @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 end rescue Exception => e @@ -25,7 +25,7 @@ class Projects::TeamsController < Projects::BaseController def destroy ActiveRecord::Base.transaction do @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 end rescue Exception => e From fbede59261cf69e9e43153739ae29c31f6812ff6 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 25 Aug 2021 17:15:13 +0800 Subject: [PATCH 04/12] fix: tarnsfer project authorize --- app/services/projects/apply_transfer_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/projects/apply_transfer_service.rb b/app/services/projects/apply_transfer_service.rb index 28097bed5..ca26f86c4 100644 --- a/app/services/projects/apply_transfer_service.rb +++ b/app/services/projects/apply_transfer_service.rb @@ -30,7 +30,7 @@ class Projects::ApplyTransferService < ApplicationService def is_permit_owner return true unless @owner.is_a?(Organization) - return @owner.is_owner?(@user) + return @owner.is_admin?(@user) end def create_apply From 598beedc7bd4c9c070654b6b7f17613202d9705a Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 26 Aug 2021 11:08:11 +0800 Subject: [PATCH 05/12] fix: remove team_user with organization_user --- app/controllers/organizations/team_users_controller.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/controllers/organizations/team_users_controller.rb b/app/controllers/organizations/team_users_controller.rb index 752e1f0e5..0c27e0701 100644 --- a/app/controllers/organizations/team_users_controller.rb +++ b/app/controllers/organizations/team_users_controller.rb @@ -29,6 +29,11 @@ class Organizations::TeamUsersController < Organizations::BaseController ActiveRecord::Base.transaction do @team_user.destroy! 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 end rescue Exception => e @@ -43,6 +48,11 @@ class Organizations::TeamUsersController < Organizations::BaseController ActiveRecord::Base.transaction do @team_user.destroy! 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 end rescue Exception => e From 65e54202464cfb5e1b2adf915196a8e86eea9ac3 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 26 Aug 2021 14:20:06 +0800 Subject: [PATCH 06/12] fix: trasfer project need remove exsit team user --- app/services/projects/transfer_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index 0b4f1d998..40ab54943 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -23,7 +23,7 @@ class Projects::TransferService < ApplicationService private 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) end From 8c11759b6cde6c7d9af420310e509c4639dffae8 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 26 Aug 2021 14:28:11 +0800 Subject: [PATCH 07/12] fix: team unit default change --- app/services/organizations/teams/create_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/organizations/teams/create_service.rb b/app/services/organizations/teams/create_service.rb index 3aeb23db5..171732293 100644 --- a/app/services/organizations/teams/create_service.rb +++ b/app/services/organizations/teams/create_service.rb @@ -54,7 +54,7 @@ class Organizations::Teams::CreateService < ApplicationService end def units_params - %w(admin owner).include?(authorize) ? %w(code issues pulls wiki releases) : params[:unit_types] + %w(code issues pulls wiki releases) end def create_units From 5637001b1675dc21c47bf11d3a147c620dfda50c Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 26 Aug 2021 17:51:46 +0800 Subject: [PATCH 08/12] add: fix some data task --- .../organizations/teams/update_service.rb | 2 +- lib/tasks/fix_some_error_data.rake | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 lib/tasks/fix_some_error_data.rake diff --git a/app/services/organizations/teams/update_service.rb b/app/services/organizations/teams/update_service.rb index b5b273d8a..275dad886 100644 --- a/app/services/organizations/teams/update_service.rb +++ b/app/services/organizations/teams/update_service.rb @@ -33,7 +33,7 @@ class Organizations::Teams::UpdateService < ApplicationService end def units_params - %w(admin owner).include?(team.authorize) ? %w(code issues pulls releases) : params[:unit_types] + %w(code issues pulls wiki releases) end def update_team(update_params) diff --git a/lib/tasks/fix_some_error_data.rake b/lib/tasks/fix_some_error_data.rake new file mode 100644 index 000000000..ad403a5b8 --- /dev/null +++ b/lib/tasks/fix_some_error_data.rake @@ -0,0 +1,45 @@ +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 +end \ No newline at end of file From 7d26fba3c0f8a42b9a8f5bf0824496e617e3f2f5 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 26 Aug 2021 17:56:19 +0800 Subject: [PATCH 09/12] add: pullrequest admin or developer --- app/controllers/pull_requests_controller.rb | 1 + app/views/pull_requests/index.json.jbuilder | 1 + 2 files changed, 2 insertions(+) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 07bb9576e..1a74e91a3 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -19,6 +19,7 @@ class PullRequestsController < ApplicationController @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}) @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") @issues_size = scopes.size diff --git a/app/views/pull_requests/index.json.jbuilder b/app/views/pull_requests/index.json.jbuilder index e13f10058..e13f19351 100644 --- a/app/views/pull_requests/index.json.jbuilder +++ b/app/views/pull_requests/index.json.jbuilder @@ -5,6 +5,7 @@ json.merged_issues_size @merged_issues.size json.search_count @issues_size json.limit @limit 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_author_name @project.owner.try(:login) From ccd477e519b8a9f30e44137bda09f118d7673eec Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 26 Aug 2021 18:36:54 +0800 Subject: [PATCH 10/12] fix: observed user can not correct find --- app/controllers/users/base_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users/base_controller.rb b/app/controllers/users/base_controller.rb index 128dc539b..214427798 100644 --- a/app/controllers/users/base_controller.rb +++ b/app/controllers/users/base_controller.rb @@ -5,7 +5,7 @@ class Users::BaseController < ApplicationController helper_method :observed_logged_user?, :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 def observed_logged_user? From cf8278ee5e75c53d1d83de9066907d43560862a6 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 27 Aug 2021 10:20:36 +0800 Subject: [PATCH 11/12] fix: owners add login --- app/views/owners/index.json.jbuilder | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/owners/index.json.jbuilder b/app/views/owners/index.json.jbuilder index 6b7e5222e..80b6b5909 100644 --- a/app/views/owners/index.json.jbuilder +++ b/app/views/owners/index.json.jbuilder @@ -2,6 +2,7 @@ json.total_count @owners.size json.owners @owners.each do |owner| json.id owner.id json.type owner.type + json.login owner.login json.name owner&.show_real_name json.avatar_url url_to_avatar(owner) end \ No newline at end of file From c9e265f95cce3230be6c5afbf225e9766b4a2104 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 27 Aug 2021 10:54:20 +0800 Subject: [PATCH 12/12] fix: transfer repository user id --- app/services/projects/transfer_service.rb | 2 +- lib/tasks/fix_some_error_data.rake | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index 40ab54943..71c6ff68e 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -28,7 +28,7 @@ class Projects::TransferService < ApplicationService end 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 def update_visit_teams diff --git a/lib/tasks/fix_some_error_data.rake b/lib/tasks/fix_some_error_data.rake index ad403a5b8..872cf4299 100644 --- a/lib/tasks/fix_some_error_data.rake +++ b/lib/tasks/fix_some_error_data.rake @@ -42,4 +42,20 @@ namespace :fix_some_error_data do 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 \ No newline at end of file