diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-28 12:24:19 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-04-28 12:24:19 +0000 |
commit | 72cb3bee798655c2d370dfedf3c04665aaa43aa3 (patch) | |
tree | 4f57c272abd6067ed3dfdf38bca9220b3ea13bf5 /app/services | |
parent | 70c1d0352e39c3c04caaa3082c3ffb4ad5c29b32 (diff) | |
download | gitlab-ce-72cb3bee798655c2d370dfedf3c04665aaa43aa3.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/issuable_links/create_service.rb | 17 | ||||
-rw-r--r-- | app/services/issue_links/create_service.rb | 4 | ||||
-rw-r--r-- | app/services/work_items/widgets/milestone_service/base_service.rb | 40 |
3 files changed, 21 insertions, 40 deletions
diff --git a/app/services/issuable_links/create_service.rb b/app/services/issuable_links/create_service.rb index f244f54b25f..1069c9e0915 100644 --- a/app/services/issuable_links/create_service.rb +++ b/app/services/issuable_links/create_service.rb @@ -19,6 +19,10 @@ module IssuableLinks return error(issuables_already_assigned_message, 409) end + if render_no_permission_error? + return error(issuables_no_permission_error_message, 403) + end + if render_not_found_error? return error(issuables_not_found_message, 404) end @@ -46,6 +50,7 @@ module IssuableLinks link end + # rubocop: enable CodeReuse/ActiveRecord private @@ -54,6 +59,10 @@ module IssuableLinks referenced_issuables.present? && (referenced_issuables - previous_related_issuables).empty? end + def render_no_permission_error? + readonly_issuables(referenced_issuables).present? && linkable_issuables(referenced_issuables).empty? + end + def render_not_found_error? linkable_issuables(referenced_issuables).empty? end @@ -116,6 +125,10 @@ module IssuableLinks _('%{issuable}(s) already assigned' % { issuable: target_issuable_type.capitalize }) end + def issuables_no_permission_error_message + _("Couldn't link %{issuable}. You must have at least the Reporter role in both projects." % { issuable: target_issuable_type }) + end + def issuables_not_found_message _('No matching %{issuable} found. Make sure that you are adding a valid %{issuable} URL.' % { issuable: target_issuable_type }) end @@ -133,6 +146,10 @@ module IssuableLinks raise NotImplementedError end + def readonly_issuables(_issuables) + [] # default to empty for non-issues + end + def previous_related_issuables raise NotImplementedError end diff --git a/app/services/issue_links/create_service.rb b/app/services/issue_links/create_service.rb index 80c6af88f21..db05920678e 100644 --- a/app/services/issue_links/create_service.rb +++ b/app/services/issue_links/create_service.rb @@ -14,6 +14,10 @@ module IssueLinks private + def readonly_issuables(issuables) + @readonly_issuables ||= issuables.select { |issuable| issuable.readable_by?(current_user) } + end + def track_event track_incident_action(current_user, issuable, :incident_relate) end diff --git a/app/services/work_items/widgets/milestone_service/base_service.rb b/app/services/work_items/widgets/milestone_service/base_service.rb deleted file mode 100644 index e9dc56cb6df..00000000000 --- a/app/services/work_items/widgets/milestone_service/base_service.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -module WorkItems - module Widgets - module MilestoneService - class BaseService < WorkItems::Widgets::BaseService - private - - def handle_milestone_change(params:) - return unless params.present? && params.key?(:milestone_id) - - unless has_permission?(:set_work_item_metadata) - params.delete(:milestone_id) - return - end - - if params[:milestone_id].nil? - work_item.milestone = nil - - return - end - - resource_group = work_item.project&.group || work_item.namespace - project_ids = [work_item.project&.id].compact - milestone = MilestonesFinder.new({ - project_ids: project_ids, - group_ids: resource_group&.self_and_ancestors&.select(:id), - ids: [params[:milestone_id]] - }).execute.first - - if milestone - work_item.milestone = milestone - else - params.delete(:milestone_id) - end - end - end - end - end -end |