summaryrefslogtreecommitdiff
path: root/app/models/group_group_link.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/group_group_link.rb')
-rw-r--r--app/models/group_group_link.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/app/models/group_group_link.rb b/app/models/group_group_link.rb
index a70110c4076..8dd245a6ab5 100644
--- a/app/models/group_group_link.rb
+++ b/app/models/group_group_link.rb
@@ -14,6 +14,23 @@ class GroupGroupLink < ApplicationRecord
presence: true
scope :non_guests, -> { where('group_access > ?', Gitlab::Access::GUEST) }
+
+ scope :with_owner_or_maintainer_access, -> do
+ where(group_access: [Gitlab::Access::OWNER, Gitlab::Access::MAINTAINER])
+ end
+
+ scope :groups_accessible_via, -> (shared_with_group_ids) do
+ links = where(shared_with_group_id: shared_with_group_ids)
+ # a group share also gives you access to the descendants of the group being shared,
+ # so we must include the descendants as well in the result.
+ Group.id_in(links.select(:shared_group_id)).self_and_descendants
+ end
+
+ scope :groups_having_access_to, -> (shared_group_ids) do
+ links = where(shared_group_id: shared_group_ids)
+ Group.id_in(links.select(:shared_with_group_id))
+ end
+
scope :preload_shared_with_groups, -> { preload(:shared_with_group) }
scope :distinct_on_shared_with_group_id_with_group_access, -> do