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 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 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/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? 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..171732293 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(code issues pulls wiki releases) end def create_units 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/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 diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index 0b4f1d998..71c6ff68e 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -23,12 +23,12 @@ 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 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/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 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 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) diff --git a/lib/tasks/fix_some_error_data.rake b/lib/tasks/fix_some_error_data.rake new file mode 100644 index 000000000..872cf4299 --- /dev/null +++ b/lib/tasks/fix_some_error_data.rake @@ -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 \ No newline at end of file