Commit 360aa1b4075ba6ffa9927971c580db0059ab4842
Committed by
Dmitriy Zaporozhets
1 parent
911f6eb1
Exists in
master
and in
4 other branches
Team core management
Showing
1 changed file
with
93 additions
and
0 deletions
Show diff stats
| @@ -0,0 +1,93 @@ | @@ -0,0 +1,93 @@ | ||
| 1 | +# UserTeamManager class | ||
| 2 | +# | ||
| 3 | +# Used for manage User teams with project repositories | ||
| 4 | +module Gitlab | ||
| 5 | + class UserTeamManager | ||
| 6 | + class << self | ||
| 7 | + def assign(team, project, access) | ||
| 8 | + project = Project.find(project) unless project.is_a? Project | ||
| 9 | + searched_project = team.user_team_project_relationships.find_by_project_id(project.id) | ||
| 10 | + | ||
| 11 | + unless searched_project.present? | ||
| 12 | + team.user_team_project_relationships.create(project_id: project.id, greatest_access: access) | ||
| 13 | + update_team_users_access_in_project(team, project) | ||
| 14 | + end | ||
| 15 | + end | ||
| 16 | + | ||
| 17 | + def resign(team, project) | ||
| 18 | + project = Project.find(project) unless project.is_a? Project | ||
| 19 | + | ||
| 20 | + team.user_team_project_relationships.with_project(project).destroy_all | ||
| 21 | + | ||
| 22 | + update_team_users_access_in_project(team, project) | ||
| 23 | + end | ||
| 24 | + | ||
| 25 | + def update_team_users_access_in_project(team, project) | ||
| 26 | + members = team.members | ||
| 27 | + members.each do |member| | ||
| 28 | + update_team_user_access_in_project(team, member, project) | ||
| 29 | + end | ||
| 30 | + end | ||
| 31 | + | ||
| 32 | + def update_team_user_access_in_project(team, user, project) | ||
| 33 | + granted_access = max_teams_member_permission_in_project(user, project) | ||
| 34 | + | ||
| 35 | + project_team_user = UsersProject.find_by_user_id_and_project_id(user.id, project.id) | ||
| 36 | + | ||
| 37 | + if project_team_user.present? | ||
| 38 | + project_team_user.destroy | ||
| 39 | + end | ||
| 40 | + | ||
| 41 | + if project_team_user.blank? && granted_access > 0 | ||
| 42 | + UsersProject.add_users_into_projects([project.id], [user.id], granted_access) | ||
| 43 | + end | ||
| 44 | + end | ||
| 45 | + | ||
| 46 | + def max_teams_member_permission_in_project(user, project, teams = nil) | ||
| 47 | + result_access = 0 | ||
| 48 | + | ||
| 49 | + user_teams = project.user_teams.with_member(user) | ||
| 50 | + | ||
| 51 | + teams ||= user_teams | ||
| 52 | + | ||
| 53 | + if teams.any? | ||
| 54 | + teams.each do |team| | ||
| 55 | + granted_access = max_team_member_permission_in_project(team, user, project) | ||
| 56 | + result_access = [granted_access, result_access].max | ||
| 57 | + end | ||
| 58 | + end | ||
| 59 | + result_access | ||
| 60 | + end | ||
| 61 | + | ||
| 62 | + def max_team_member_permission_in_project(team, user, project) | ||
| 63 | + member_access = team.default_projects_access(user) | ||
| 64 | + team_access = team.user_team_project_relationships.find_by_project_id(project.id).greatest_access | ||
| 65 | + | ||
| 66 | + [team_access, member_access].min | ||
| 67 | + end | ||
| 68 | + | ||
| 69 | + def add_member_into_team(team, user, access, admin) | ||
| 70 | + user = User.find(user) unless user.is_a? User | ||
| 71 | + | ||
| 72 | + team.user_team_user_relationships.create(user_id: user.id, permission: access, group_admin: admin) | ||
| 73 | + team.projects.each do |project| | ||
| 74 | + update_team_user_access_in_project(team, user, project) | ||
| 75 | + end | ||
| 76 | + end | ||
| 77 | + | ||
| 78 | + def remove_member_from_team(team, user) | ||
| 79 | + user = User.find(user) unless user.is_a? User | ||
| 80 | + | ||
| 81 | + team.user_team_user_relationships.with_user(user).destroy_all | ||
| 82 | + other_teams = [] | ||
| 83 | + team.projects.each do |project| | ||
| 84 | + other_teams << project.user_teams.with_member(user) | ||
| 85 | + end | ||
| 86 | + other_teams.uniq | ||
| 87 | + unless other_teams.any? | ||
| 88 | + UsersProject.in_projects(team.projects).with_user(user).destroy_all | ||
| 89 | + end | ||
| 90 | + end | ||
| 91 | + end | ||
| 92 | + end | ||
| 93 | +end |