Commit 0f39610532238468a0d058c4df5e6433807fdbd1

Authored by Andrey Kumanyaev
1 parent a0f2fbc2

Add control of action in project to team assigment

Showing 1 changed file with 13 additions and 10 deletions   Show diff stats
lib/gitlab/user_team_manager.rb
@@ -10,7 +10,7 @@ module Gitlab @@ -10,7 +10,7 @@ module Gitlab
10 10
11 unless searched_project.present? 11 unless searched_project.present?
12 team.user_team_project_relationships.create(project_id: project.id, greatest_access: access) 12 team.user_team_project_relationships.create(project_id: project.id, greatest_access: access)
13 - update_team_users_access_in_project(team, project) 13 + update_team_users_access_in_project(team, project, :added)
14 end 14 end
15 end 15 end
16 16
@@ -19,7 +19,7 @@ module Gitlab @@ -19,7 +19,7 @@ module Gitlab
19 19
20 team.user_team_project_relationships.with_project(project).destroy_all 20 team.user_team_project_relationships.with_project(project).destroy_all
21 21
22 - update_team_users_access_in_project(team, project) 22 + update_team_users_access_in_project(team, project, :updated)
23 end 23 end
24 24
25 def update_team_user_membership(team, member, options) 25 def update_team_user_membership(team, member, options)
@@ -52,7 +52,7 @@ module Gitlab @@ -52,7 +52,7 @@ module Gitlab
52 project_relation = team.user_team_project_relationships.find_by_project_id(project) 52 project_relation = team.user_team_project_relationships.find_by_project_id(project)
53 if permission != team.max_project_access(project) 53 if permission != team.max_project_access(project)
54 if project_relation.update_attributes(greatest_access: permission) 54 if project_relation.update_attributes(greatest_access: permission)
55 - update_team_users_access_in_project(team, project) 55 + update_team_users_access_in_project(team, project, :updated)
56 true 56 true
57 else 57 else
58 false 58 false
@@ -68,15 +68,15 @@ module Gitlab @@ -68,15 +68,15 @@ module Gitlab
68 end 68 end
69 end 69 end
70 70
71 - def update_team_users_access_in_project(team, project) 71 + def update_team_users_access_in_project(team, project, action)
72 members = team.members 72 members = team.members
73 members.each do |member| 73 members.each do |member|
74 - update_team_user_access_in_project(team, member, project) 74 + update_team_user_access_in_project(team, member, project, action)
75 end 75 end
76 end 76 end
77 77
78 - def update_team_user_access_in_project(team, user, project)  
79 - granted_access = max_teams_member_permission_in_project(user, project) 78 + def update_team_user_access_in_project(team, user, project, action)
  79 + granted_access = max_teams_member_permission_in_project(user, project, action)
80 80
81 project_team_user = UsersProject.find_by_user_id_and_project_id(user.id, project.id) 81 project_team_user = UsersProject.find_by_user_id_and_project_id(user.id, project.id)
82 project_team_user.destroy if project_team_user.present? 82 project_team_user.destroy if project_team_user.present?
@@ -85,11 +85,14 @@ module Gitlab @@ -85,11 +85,14 @@ module Gitlab
85 project.team << [user, granted_access] if granted_access > 0 85 project.team << [user, granted_access] if granted_access > 0
86 end 86 end
87 87
88 - def max_teams_member_permission_in_project(user, project, teams = nil) 88 + def max_teams_member_permission_in_project(user, project, action = nil, teams = nil)
89 result_access = 0 89 result_access = 0
90 90
91 teams ||= project.user_teams.with_member(user) 91 teams ||= project.user_teams.with_member(user)
92 - result_access ||= project.users_project.with_user(user).first.project_access 92 +
  93 + if action && (action == :added) && (teams.count == 1)
  94 + result_access ||= project.users_project.with_user(user).first.project_access
  95 + end
93 96
94 if teams.any? 97 if teams.any?
95 teams.each do |team| 98 teams.each do |team|
@@ -112,7 +115,7 @@ module Gitlab @@ -112,7 +115,7 @@ module Gitlab
112 115
113 team.user_team_user_relationships.create(user_id: user.id, permission: access, group_admin: admin) 116 team.user_team_user_relationships.create(user_id: user.id, permission: access, group_admin: admin)
114 team.projects.each do |project| 117 team.projects.each do |project|
115 - update_team_user_access_in_project(team, user, project) 118 + update_team_user_access_in_project(team, user, project, :added)
116 end 119 end
117 end 120 end
118 121