Commit 316cf61965f70e90fb158e6172e2859f2535f46b
Exists in
master
and in
4 other branches
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,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,12 +85,14 @@ module Gitlab | @@ -85,12 +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 | - 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 | if teams.any? | 97 | if teams.any? |
| 96 | teams.each do |team| | 98 | teams.each do |team| |
| @@ -113,7 +115,7 @@ module Gitlab | @@ -113,7 +115,7 @@ module Gitlab | ||
| 113 | 115 | ||
| 114 | 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) |
| 115 | team.projects.each do |project| | 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 | end | 119 | end |
| 118 | end | 120 | end |
| 119 | 121 |