diff options
author | Marko, Peter <peter.marko@siemens.com> | 2018-07-08 22:41:55 +0300 |
---|---|---|
committer | Peter Marko <peter.marko@siemens.com> | 2018-07-23 21:57:50 +0300 |
commit | 9cdf4292c55c41feeb056842cefcd88a957afb05 (patch) | |
tree | 1310db1a90a2d2cb0534b855596925e7dd5b954c /app/finders | |
parent | 5dadd8bd9467cdca3a0ad97f46b3cc59d4df340a (diff) |
Add min_access_level filter to groups API
Signed-off-by: Marko, Peter <peter.marko@siemens.com>
Diffstat (limited to 'app/finders')
-rw-r--r-- | app/finders/groups_finder.rb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/app/finders/groups_finder.rb b/app/finders/groups_finder.rb index 0754123a3cf..0eeba1d2428 100644 --- a/app/finders/groups_finder.rb +++ b/app/finders/groups_finder.rb @@ -8,6 +8,7 @@ # owned: boolean # parent: Group # all_available: boolean (defaults to true) +# min_access_level: integer # # Users with full private access can see all groups. The `owned` and `parent` # params can be used to restrict the groups that are returned. @@ -39,6 +40,7 @@ class GroupsFinder < UnionFinder def all_groups return [owned_groups] if params[:owned] + return [groups_with_min_access_level] if min_access_level? return [Group.all] if current_user&.full_private_access? && all_available? groups = [] @@ -56,6 +58,16 @@ class GroupsFinder < UnionFinder current_user.groups end + def groups_with_min_access_level + groups = current_user + .groups + .where('members.access_level >= ?', params[:min_access_level]) + + Gitlab::GroupHierarchy + .new(groups) + .base_and_descendants + end + def by_parent(groups) return groups unless params[:parent] @@ -73,4 +85,8 @@ class GroupsFinder < UnionFinder def all_available? params.fetch(:all_available, true) end + + def min_access_level? + current_user && params[:min_access_level].present? + end end |