修复:更改组织下项目权限同时更改组织下权限同步至gitea
This commit is contained in:
parent
3f7366fbcd
commit
8b14ee3c72
|
@ -24,23 +24,62 @@ module ProjectOperable
|
||||||
if self.owner.is_a?(Organization)
|
if self.owner.is_a?(Organization)
|
||||||
case role_name
|
case role_name
|
||||||
when 'Manager'
|
when 'Manager'
|
||||||
|
# 构建相应的团队
|
||||||
team = self.owner.teams.admin.take
|
team = self.owner.teams.admin.take
|
||||||
team = team.nil? ? Team.build(self.user_id, 'admin', '管理员', '', 'admin', false, false) : team
|
if team.nil?
|
||||||
TeamProject.build(self.user_id, team.id, self.id)
|
team = Team.build(self.user_id, 'admin', '管理员', '', 'admin', false, false)
|
||||||
OrganizationUser.build(self.user_id, user_id)
|
gteam = $gitea_client.post_orgs_teams_by_org(self.owner.login, {body: team.to_gitea_hash.to_json}) rescue nil
|
||||||
|
team.update_attributes!({gtid: gteam["id"]}) unless gteam.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
# 设置项目在团队中的访问权限
|
||||||
|
team_project = TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
tp_result = $gitea_client.put_teams_repos_by_id_org_repo(team.gtid, self.owner.login, self.identifier) rescue nil
|
||||||
|
|
||||||
|
# 新增对应的团队成员
|
||||||
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
||||||
|
$gitea_client.put_teams_members_by_id_username(team&.gtid, team_user.user&.login) rescue nil # 新增新的
|
||||||
|
|
||||||
|
# 确保组织成员中有该用户
|
||||||
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
when 'Developer'
|
when 'Developer'
|
||||||
|
# 构建相应的团队
|
||||||
team = self.owner.teams.write.take
|
team = self.owner.teams.write.take
|
||||||
team = team.nil? ? Team.build(self.user_id, 'developer', '开发者', '', 'write', false, false) : team
|
if team.nil?
|
||||||
TeamProject.build(self.user_id, team.id, self.id)
|
team = Team.build(self.user_id, 'developer', '开发者', '', 'write', false, false)
|
||||||
OrganizationUser.build(self.user_id, user_id)
|
gteam = $gitea_client.post_orgs_teams_by_org(self.owner.login, {body: team.to_gitea_hash.to_json}) rescue nil
|
||||||
|
team.update_attributes!({gtid: gteam["id"]}) unless gteam.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
# 设置项目在团队中的访问权限
|
||||||
|
team_project = TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
tp_result = $gitea_client.put_teams_repos_by_id_org_repo(team.gtid, self.owner.login, self.identifier) rescue nil
|
||||||
|
|
||||||
|
# 新增对应的团队成员
|
||||||
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
||||||
|
$gitea_client.put_teams_members_by_id_username(team&.gtid, team_user.user&.login) rescue nil # 新增新的
|
||||||
|
|
||||||
|
# 确保组织成员中有该用户
|
||||||
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
when 'Reporter'
|
when 'Reporter'
|
||||||
|
# 构建相应的团队
|
||||||
team = self.owner.teams.read.take
|
team = self.owner.teams.read.take
|
||||||
team = team.nil? ? Team.build(self.user_id, 'reporter', '报告者', '', 'read', false, false) : team
|
if team.nil?
|
||||||
TeamProject.build(self.user_id, team.id, self.id)
|
team = Team.build(self.user_id, 'reporter', '报告者', '', 'read', false, false)
|
||||||
OrganizationUser.build(self.user_id, user_id)
|
gteam = $gitea_client.post_orgs_teams_by_org(self.owner.login, {body: team.to_gitea_hash.to_json}) rescue nil
|
||||||
|
team.update_attributes!({gtid: gteam["id"]}) unless gteam.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
# 设置项目在团队中的访问权限
|
||||||
|
team_project = TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
tp_result = $gitea_client.put_teams_repos_by_id_org_repo(team.gtid, self.owner.login, self.identifier) rescue nil
|
||||||
|
|
||||||
|
# 新增对应的团队成员
|
||||||
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
team_user = TeamUser.build(self.user_id, user_id, team.id)
|
||||||
|
$gitea_client.put_teams_members_by_id_username(team&.gtid, team_user.user&.login) rescue nil # 新增新的
|
||||||
|
|
||||||
|
# 确保组织成员中有该用户
|
||||||
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
member = members.create!(user_id: user_id, team_user_id: team_user&.id)
|
member = members.create!(user_id: user_id, team_user_id: team_user&.id)
|
||||||
|
@ -71,26 +110,70 @@ module ProjectOperable
|
||||||
|
|
||||||
def change_member_role!(user_id, role)
|
def change_member_role!(user_id, role)
|
||||||
member = self.member(user_id)
|
member = self.member(user_id)
|
||||||
|
# 所有者为组织,并且该用户属于组织成员
|
||||||
if self.owner.is_a?(Organization) && member.team_user.present?
|
if self.owner.is_a?(Organization) && member.team_user.present?
|
||||||
case role&.name
|
case role&.name
|
||||||
when 'Manager'
|
when 'Manager'
|
||||||
|
# 构建相应的团队
|
||||||
team = self.owner.teams.admin.take
|
team = self.owner.teams.admin.take
|
||||||
team = team.nil? ? Team.build(self.user_id, 'admin', '管理员', '', 'admin', false, false) : team
|
if team.nil?
|
||||||
TeamProject.build(self.user_id, team.id, self.id)
|
team = Team.build(self.user_id, 'admin', '管理员', '', 'admin', false, false)
|
||||||
|
gteam = $gitea_client.post_orgs_teams_by_org(self.owner.login, {body: team.to_gitea_hash.to_json}) rescue nil
|
||||||
|
team.update_attributes!({gtid: gteam["id"]}) unless gteam.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
# 设置项目在团队中的访问权限
|
||||||
|
team_project = TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
tp_result = $gitea_client.put_teams_repos_by_id_org_repo(team.gtid, self.owner.login, self.identifier) rescue nil
|
||||||
|
|
||||||
|
# 更改对应的团队成员
|
||||||
|
team_user = member.team_user
|
||||||
|
$gitea_client.delete_teams_members_by_id_username(team_user.team.gtid, team_user.user&.login) rescue nil # 移除旧的
|
||||||
|
$gitea_client.put_teams_members_by_id_username(team&.gtid, team_user.user&.login) rescue nil # 新增新的
|
||||||
|
team_user.update_column(:team_id, team.id)
|
||||||
|
|
||||||
|
# 确保组织成员中有该用户
|
||||||
OrganizationUser.build(self.user_id, user_id)
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
team_user = member.team_user.update(team_id: team&.id)
|
|
||||||
when 'Developer'
|
when 'Developer'
|
||||||
|
# 构建相应的团队
|
||||||
team = self.owner.teams.write.take
|
team = self.owner.teams.write.take
|
||||||
team = team.nil? ? Team.build(self.user_id, 'developer', '开发者', '', 'write', false, false) : team
|
if team.nil?
|
||||||
TeamProject.build(self.user_id, team.id, self.id)
|
team = Team.build(self.user_id, 'developer', '开发者', '', 'write', false, false)
|
||||||
|
gteam = $gitea_client.post_orgs_teams_by_org(self.owner.login, {body: team.to_gitea_hash.to_json}) rescue nil
|
||||||
|
team.update_attributes!({gtid: gteam["id"]}) unless gteam.nil?
|
||||||
|
end
|
||||||
|
# 设置项目在团队中的访问权限
|
||||||
|
team_project = TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
$gitea_client.put_teams_repos_by_id_org_repo(team.gtid, self.owner.login, self.identifier) rescue nil
|
||||||
|
|
||||||
|
# 更改对应的团队成员
|
||||||
|
team_user = member.team_user
|
||||||
|
$gitea_client.delete_teams_members_by_id_username(team_user.team.gtid, team_user.user&.login) rescue nil # 移除旧的
|
||||||
|
$gitea_client.put_teams_members_by_id_username(team&.gtid, team_user.user&.login) rescue nil # 新增新的
|
||||||
|
team_user.update_column(:team_id, team.id)
|
||||||
|
|
||||||
OrganizationUser.build(self.user_id, user_id)
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
team_user = member.team_user.update(team_id: team&.id)
|
|
||||||
when 'Reporter'
|
when 'Reporter'
|
||||||
|
# 构建相应的团队
|
||||||
team = self.owner.teams.read.take
|
team = self.owner.teams.read.take
|
||||||
team = team.nil? ? Team.build(self.user_id, 'reporter', '报告者', '', 'read', false, false) : team
|
if team.nil?
|
||||||
TeamProject.build(self.user_id, team.id, self.id)
|
team = Team.build(self.user_id, 'reporter', '报告者', '', 'read', false, false)
|
||||||
|
gteam = $gitea_client.post_orgs_teams_by_org(self.owner.login, {body: team.to_gitea_hash.to_json}) rescue nil
|
||||||
|
team.update_attributes!({gtid: gteam["id"]}) unless gteam.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
# 设置项目在团队中的访问权限
|
||||||
|
team_project = TeamProject.build(self.user_id, team.id, self.id)
|
||||||
|
tp_result = $gitea_client.put_teams_repos_by_id_org_repo(team.gtid, self.owner.login, self.identifier) rescue nil
|
||||||
|
|
||||||
|
# 更改对应的团队成员
|
||||||
|
team_user = member.team_user
|
||||||
|
$gitea_client.delete_teams_members_by_id_username(team_user.team.gtid, team_user.user&.login) rescue nil # 移除旧的
|
||||||
|
$gitea_client.put_teams_members_by_id_username(team&.gtid, team_user.user&.login) rescue nil # 新增新的
|
||||||
|
team_user.update_column(:team_id, team.id)
|
||||||
|
|
||||||
|
# 确保组织成员中有该用户
|
||||||
OrganizationUser.build(self.user_id, user_id)
|
OrganizationUser.build(self.user_id, user_id)
|
||||||
team_user = member.team_user.update(team_id: team&.id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
member.member_roles.last.update_attributes!(role: role)
|
member.member_roles.last.update_attributes!(role: role)
|
||||||
|
|
|
@ -24,6 +24,7 @@ class Projects::TransferService < ApplicationService
|
||||||
|
|
||||||
private
|
private
|
||||||
def update_owner
|
def update_owner
|
||||||
|
# 转移项目需要移除原来的权限
|
||||||
project.members.map{|m| m.destroy! if m.user_id == owner.id || project.member(new_owner.id) || (new_owner.is_a?(Organization) && new_owner.is_member?(m.user_id)) }
|
project.members.map{|m| m.destroy! if m.user_id == owner.id || project.member(new_owner.id) || (new_owner.is_a?(Organization) && new_owner.is_member?(m.user_id)) }
|
||||||
project.set_owner_permission(new_owner)
|
project.set_owner_permission(new_owner)
|
||||||
project.update!(user_id: new_owner.id)
|
project.update!(user_id: new_owner.id)
|
||||||
|
|
|
@ -16,8 +16,10 @@ namespace :sync_data_to_gitea do
|
||||||
end
|
end
|
||||||
team.team_users.each do |teamuser|
|
team.team_users.each do |teamuser|
|
||||||
userlogin = teamuser&.user&.login
|
userlogin = teamuser&.user&.login
|
||||||
|
ou = org.organization_users.find_by(user_id: teamuser.user_id)
|
||||||
|
OrganizationUser.build(org.id, teamuser.user_id) unless ou.present?
|
||||||
next if ($gitea_client.get_teams_members_by_id_username(team.gtid, userlogin) rescue nil)
|
next if ($gitea_client.get_teams_members_by_id_username(team.gtid, userlogin) rescue nil)
|
||||||
tu_result = $gitea_client.put_teams_members_by_id_username(team.gtid, userlogin) rescue nil
|
tu_result = $gitea_client.put_teams_members_by_id_username(team.gtid, userlogin) rescue nil
|
||||||
raise ActiveRecord::Rollback if tu_result.nil?
|
raise ActiveRecord::Rollback if tu_result.nil?
|
||||||
end
|
end
|
||||||
team.team_projects.each do |teamp|
|
team.team_projects.each do |teamp|
|
||||||
|
|
Loading…
Reference in New Issue