diff options
| author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-29 21:10:44 +0000 |
|---|---|---|
| committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-29 21:10:44 +0000 |
| commit | cb37aee9894007e60893693d5d48199ea0f0958f (patch) | |
| tree | 49cfdd627a74b5f3f94b0a498a39e3be3b38af33 /app/services/concerns | |
| parent | 888564d614552b19b44029f530a67592d66c06fd (diff) | |
| download | gitlab-ce-cb37aee9894007e60893693d5d48199ea0f0958f.tar.gz | |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/concerns')
| -rw-r--r-- | app/services/concerns/group_linkable.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/app/services/concerns/group_linkable.rb b/app/services/concerns/group_linkable.rb new file mode 100644 index 00000000000..3e2e9cfd5eb --- /dev/null +++ b/app/services/concerns/group_linkable.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module GroupLinkable + extend ActiveSupport::Concern + + def execute + return error('Not Found', 404) unless valid_to_create? + + build_link + + if link.save + after_successful_save + success(link: link) + else + error(link.errors.full_messages.to_sentence, 409) + end + end + + private + + attr_reader :shared_with_group, :link + + def sharing_allowed? + sharing_outside_hierarchy_allowed? || within_hierarchy? + end + + def sharing_outside_hierarchy_allowed? + !root_ancestor.namespace_settings.prevent_sharing_groups_outside_hierarchy + end + + def within_hierarchy? + root_ancestor.self_and_descendants_ids.include?(shared_with_group.id) + end + + def after_successful_save + setup_authorizations + end +end |
