Commit 316cf61965f70e90fb158e6172e2859f2535f46b

Authored by Dmitriy Zaporozhets
2 parents d2ca549f 0f396105

Merge pull request #3247 from Undev/feature/fix_bug_in_team_assigment

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