summaryrefslogtreecommitdiff
path: root/app/policies/board_policy.rb
blob: e2b16249c853a927664c9f9bdbae220fe7d879c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# frozen_string_literal: true

class BoardPolicy < BasePolicy
  include FindGroupProjects

  delegate { @subject.resource_parent }

  condition(:is_group_board) { @subject.group_board? }
  condition(:is_project_board) { @subject.project_board? }

  rule { is_project_board & can?(:read_project) }.enable :read_parent

  rule { is_group_board & can?(:read_group) }.policy do
    enable :read_parent
    enable :read_milestone
    enable :read_issue
  end

  condition(:reporter_of_group_projects) do
    next unless @user

    group_projects_for(user: @user, group: @subject.resource_parent)
      .visible_to_user_and_access_level(@user, ::Gitlab::Access::REPORTER)
      .exists?
  end

  rule { is_group_board & reporter_of_group_projects }.policy do
    enable :create_non_backlog_issues
  end

  rule { is_project_board & can?(:admin_issue) }.policy do
    enable :create_non_backlog_issues
  end
end