diff options
| author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-31 12:10:34 +0000 |
|---|---|---|
| committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-31 12:10:34 +0000 |
| commit | 7dc0a21702cd9345eeee385d8ce20002d9c9fb36 (patch) | |
| tree | a369b90331ed6f61a37477e5e5713fcccfd45b4c /lib/banzai/reference_parser | |
| parent | e5f7ee6673f47290d860565f13a5a26391822260 (diff) | |
| download | gitlab-ce-7dc0a21702cd9345eeee385d8ce20002d9c9fb36.tar.gz | |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/banzai/reference_parser')
| -rw-r--r-- | lib/banzai/reference_parser/merge_request_parser.rb | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/lib/banzai/reference_parser/merge_request_parser.rb b/lib/banzai/reference_parser/merge_request_parser.rb index 78cbf4a807d..1664fa1f9ff 100644 --- a/lib/banzai/reference_parser/merge_request_parser.rb +++ b/lib/banzai/reference_parser/merge_request_parser.rb @@ -7,6 +7,19 @@ module Banzai self.reference_type = :merge_request + def nodes_visible_to_user(user, nodes) + return super if Feature.disabled?(:optimize_merge_request_parser, user, default_enabled: :yaml) + + merge_request_nodes = nodes.select { |node| node.has_attribute?(self.class.data_attribute) } + records = projects_for_nodes(merge_request_nodes) + + merge_request_nodes.select do |node| + project = records[node] + + project && can_read_reference?(user, project) + end + end + def records_for_nodes(nodes) @merge_requests_for_nodes ||= grouped_objects_for_nodes( nodes, @@ -23,14 +36,19 @@ module Banzai ) end - def can_read_reference?(user, merge_request) + def can_read_reference?(user, object) memo = strong_memoize(:can_read_reference) { {} } - project_id = merge_request.project_id + project_id = object.project_id return memo[project_id] if memo.key?(project_id) - memo[project_id] = can?(user, :read_merge_request_iid, merge_request.project) + memo[project_id] = can?(user, :read_merge_request_iid, object) + end + + def projects_for_nodes(nodes) + @projects_for_nodes ||= + grouped_objects_for_nodes(nodes, Project.includes(:project_feature, :group, :namespace), 'data-project') end end end |
