Class: Issues::ConfidentialityFilter

Inherits:
Issuables::BaseFilter show all
Defined in:
app/finders/issues/confidentiality_filter.rb

Constant Summary collapse

CONFIDENTIAL_ACCESS_LEVEL =
Gitlab::Access::PLANNER

Constants inherited from Issuables::BaseFilter

Issuables::BaseFilter::FILTER_ANY, Issuables::BaseFilter::FILTER_NONE

Instance Attribute Summary

Attributes inherited from Issuables::BaseFilter

#params

Instance Method Summary collapse

Constructor Details

#initialize(current_user:, parent:, assignee_filter:, related_groups: nil, **kwargs) ⇒ ConfidentialityFilter

Returns a new instance of ConfidentialityFilter.



7
8
9
10
11
12
13
14
# File 'app/finders/issues/confidentiality_filter.rb', line 7

def initialize(current_user:, parent:, assignee_filter:, related_groups: nil, **kwargs)
  @current_user = current_user
  @parent = parent
  @assignee_filter = assignee_filter
  @related_groups = related_groups

  super(**kwargs)
end

Instance Method Details

#filter(issues) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/finders/issues/confidentiality_filter.rb', line 16

def filter(issues)
  issues = issues.confidential_only if params[:confidential]

  # We do not need to do the confidentiality check if we know that only public issues will be returned
  return issues.public_only if @current_user.blank? || params[:confidential] == false

  return issues if user_can_see_all_confidential_issues?

  issues.public_only.or(
    issues.confidential_only.merge(
      issues.authored(@current_user)
        .or(issues.assigned_to(@current_user))
        .or(access_to_parent_exists(issues))
    )
  ).allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/422045')
end