summaryrefslogtreecommitdiff
path: root/app/services/users
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2017-02-27 16:16:39 -0600
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2017-02-28 14:18:20 +0200
commit05f331f3ce17ec15377209bf4980b4c91954aa59 (patch)
tree4a589bead160d9777e355f877d872e1cc23c29a7 /app/services/users
parent71fbbc9da428268411c5a3cef319f7537b63d199 (diff)
downloadgitlab-ce-05f331f3ce17ec15377209bf4980b4c91954aa59.tar.gz
Fix access to projects shared with a nested groupdm-nested-group-shared-projects
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/services/users')
-rw-r--r--app/services/users/refresh_authorized_projects_service.rb16
1 files changed, 14 insertions, 2 deletions
diff --git a/app/services/users/refresh_authorized_projects_service.rb b/app/services/users/refresh_authorized_projects_service.rb
index fad741531ea..d9370bbb598 100644
--- a/app/services/users/refresh_authorized_projects_service.rb
+++ b/app/services/users/refresh_authorized_projects_service.rb
@@ -115,11 +115,23 @@ module Users
# Returns a union query of projects that the user is authorized to access
def project_authorizations_union
relations = [
+ # Personal projects
user.personal_projects.select("#{user.id} AS user_id, projects.id AS project_id, #{Gitlab::Access::MASTER} AS access_level"),
- user.groups_projects.select_for_project_authorization,
+
+ # Projects the user is a member of
user.projects.select_for_project_authorization,
+
+ # Projects of groups the user is a member of
+ user.groups_projects.select_for_project_authorization,
+
+ # Projects of subgroups of groups the user is a member of
+ user.nested_groups_projects.select_for_project_authorization,
+
+ # Projects shared with groups the user is a member of
user.groups.joins(:shared_projects).select_for_project_authorization,
- user.nested_projects.select_for_project_authorization
+
+ # Projects shared with subgroups of groups the user is a member of
+ user.nested_groups.joins(:shared_projects).select_for_project_authorization
]
Gitlab::SQL::Union.new(relations)