diff options
author | Rémy Coutable <remy@rymai.me> | 2019-04-10 06:47:53 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2019-04-10 06:47:53 +0000 |
commit | 3b163a75b7789c92a001343ebccaac00b645eb8d (patch) | |
tree | 11d635e4ba816de143378cc4e3b8f9ea0141b313 /app | |
parent | 112741ef635a4c4f9504bf63a3b0207a438e8ee8 (diff) | |
parent | bcfd04a2210c88997332c069493fb008e5d39d90 (diff) | |
download | gitlab-ce-3b163a75b7789c92a001343ebccaac00b645eb8d.tar.gz |
Merge branch 'revert-2cc01f12' into 'master'
Revert "Merge branch 'sh-optimize-projects-api' into 'master'"
Closes #60315
See merge request gitlab-org/gitlab-ce!27195
Diffstat (limited to 'app')
-rw-r--r-- | app/finders/projects_finder.rb | 2 | ||||
-rw-r--r-- | app/models/project.rb | 43 |
2 files changed, 9 insertions, 36 deletions
diff --git a/app/finders/projects_finder.rb b/app/finders/projects_finder.rb index 0319e95d439..93d3c991846 100644 --- a/app/finders/projects_finder.rb +++ b/app/finders/projects_finder.rb @@ -81,7 +81,7 @@ class ProjectsFinder < UnionFinder if private_only? current_user.authorized_projects else - Project.public_or_visible_to_user(current_user, params[:visibility_level]) + Project.public_or_visible_to_user(current_user) end end end diff --git a/app/models/project.rb b/app/models/project.rb index 3e9bb6aedf1..66fc83113ea 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -459,41 +459,14 @@ class Project < ApplicationRecord # Returns a collection of projects that is either public or visible to the # logged in user. - # - # requested_visiblity_levels: Normally all projects that are visible - # to the user (e.g. internal and public) are queried, but this - # parameter allows the caller to narrow the search space to optimize - # database queries. For instance, a caller may only want to see - # internal projects. Instead of querying for internal and public - # projects and throwing away public projects, this parameter allows - # the query to be targeted for only internal projects. - def self.public_or_visible_to_user(user = nil, requested_visibility_levels = []) - return public_to_user unless user - - visible_levels = Gitlab::VisibilityLevel.levels_for_user(user) - include_private = true - requested_visibility_levels = Array(requested_visibility_levels) - - if requested_visibility_levels.present? - visible_levels &= requested_visibility_levels - include_private = requested_visibility_levels.include?(Gitlab::VisibilityLevel::PRIVATE) - end - - public_or_internal_rel = - if visible_levels.present? - where('projects.visibility_level IN (?)', visible_levels) - else - Project.none - end - - private_rel = - if include_private - where('EXISTS (?)', user.authorizations_for_projects) - else - Project.none - end - - public_or_internal_rel.or(private_rel) + def self.public_or_visible_to_user(user = nil) + if user + where('EXISTS (?) OR projects.visibility_level IN (?)', + user.authorizations_for_projects, + Gitlab::VisibilityLevel.levels_for_user(user)) + else + public_to_user + end end # project features may be "disabled", "internal", "enabled" or "public". If "internal", |