Merge pull request '组织权限修复,以及一些错误数据修复脚本' (#127) from yystopf/forgeplus:hh_team_unit into develop
This commit is contained in:
commit
b9bf3fb5ff
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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?
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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]}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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
|
Loading…
Reference in New Issue