diff --git a/ee/spec/finders/ee/group_members_finder_spec.rb b/ee/spec/finders/ee/group_members_finder_spec.rb index 87c33557fd0318915cee2a5f1bff045e5d96a26e..8c696d629b4981d427c8f823d73f3965d50f2fe7 100644 --- a/ee/spec/finders/ee/group_members_finder_spec.rb +++ b/ee/spec/finders/ee/group_members_finder_spec.rb @@ -21,6 +21,7 @@ let_it_be(:sub_sub_group) { create(:group, parent: sub_group) } let_it_be(:public_shared_group) { create(:group, :public) } let_it_be(:private_shared_group) { create(:group, :private) } + let_it_be(:user0) { create(:user) } let_it_be(:user1) { create(:user) } let_it_be(:user2) { create(:user) } let_it_be(:user3) { create(:user) } @@ -52,6 +53,9 @@ group_custom_reporter_role = create(:member_role, { name: 'custom reporter', namespace: group, base_access_level: ::Gitlab::Access::REPORTER }) + group_custom_planner_role = create(:member_role, { name: 'custom planner', + namespace: group, + base_access_level: ::Gitlab::Access::PLANNER }) public_shared_group_custom_maintainer_role = create(:member_role, { name: 'custom maintainer', namespace: public_shared_group, base_access_level: ::Gitlab::Access::MAINTAINER }) @@ -61,6 +65,9 @@ public_shared_group_custom_reporter_role = create(:member_role, { name: 'custom reporter', namespace: public_shared_group, base_access_level: ::Gitlab::Access::REPORTER }) + public_shared_group_custom_planner_role = create(:member_role, { name: 'custom planner', + namespace: public_shared_group, + base_access_level: ::Gitlab::Access::PLANNER }) private_shared_group_custom_maintainer_role = create(:member_role, { name: 'custom maintainer', namespace: private_shared_group, base_access_level: ::Gitlab::Access::MAINTAINER }) @@ -70,9 +77,15 @@ private_shared_group_custom_reporter_role = create(:member_role, { name: 'custom reporter', namespace: private_shared_group, base_access_level: ::Gitlab::Access::REPORTER }) + private_shared_group_custom_planner_role = create(:member_role, { name: 'custom planner', + namespace: private_shared_group, + base_access_level: ::Gitlab::Access::PLANNER }) { + user0_sub_sub_group: create(:group_member, :planner, group: sub_sub_group, user: user0, member_role: group_custom_planner_role), user1_sub_sub_group: create(:group_member, :maintainer, group: sub_sub_group, user: user1, member_role: group_custom_maintainer_role), + user0_sub_group: create(:group_member, :planner, group: sub_group, user: user0, member_role: group_custom_planner_role), user1_sub_group: create(:group_member, :developer, group: sub_group, user: user1, member_role: group_custom_developer_role), + user0_group: create(:group_member, :planner, group: group, user: user0, member_role: group_custom_planner_role), user1_group: create(:group_member, :reporter, group: group, user: user1, member_role: group_custom_reporter_role), user1_public_shared_group: create(:group_member, :maintainer, group: public_shared_group, user: user1, member_role: public_shared_group_custom_maintainer_role), user1_private_shared_group: create(:group_member, :maintainer, group: private_shared_group, user: user1, member_role: private_shared_group_custom_maintainer_role), @@ -84,7 +97,9 @@ user3_sub_sub_group: create(:group_member, :developer, group: sub_sub_group, user: user3, expires_at: 1.day.from_now, member_role: group_custom_developer_role), user3_sub_group: create(:group_member, :developer, group: sub_group, user: user3, expires_at: 2.days.from_now, member_role: group_custom_developer_role), user3_group: create(:group_member, :reporter, group: group, user: user3, member_role: group_custom_reporter_role), + user0_public_shared_group: create(:group_member, :planner, group: public_shared_group, user: user0, member_role: public_shared_group_custom_planner_role), user3_public_shared_group: create(:group_member, :reporter, group: public_shared_group, user: user3, member_role: public_shared_group_custom_reporter_role), + user0_private_shared_group: create(:group_member, :planner, group: private_shared_group, user: user0, member_role: private_shared_group_custom_planner_role), user3_private_shared_group: create(:group_member, :reporter, group: private_shared_group, user: user3, member_role: private_shared_group_custom_reporter_role), user4_sub_sub_group: create(:group_member, :reporter, group: sub_sub_group, user: user4, member_role: group_custom_reporter_role), user4_sub_group: create(:group_member, :developer, group: sub_group, user: user4, expires_at: 1.day.from_now, member_role: group_custom_developer_role), @@ -100,44 +115,51 @@ # rubocop: disable Layout/ArrayAlignment where(:subject_relations, :subject_group, :expected_members) do [] | :group | [] - GroupMembersFinder::DEFAULT_RELATIONS | :group | [:user1_group, :user2_group, :user3_group, :user4_group] - [:direct] | :group | [:user1_group, :user2_group, :user3_group, :user4_group] + GroupMembersFinder::DEFAULT_RELATIONS | :group | [:user0_group, :user1_group, :user2_group, :user3_group, :user4_group] + [:direct] | :group | [:user0_group, :user1_group, :user2_group, :user3_group, :user4_group] [:inherited] | :group | [] - [:descendants] | :group | [:user1_sub_group, :user1_sub_sub_group, + [:descendants] | :group | [:user0_sub_group, :user0_sub_sub_group, + :user1_sub_group, :user1_sub_sub_group, :user2_sub_group, :user2_sub_sub_group, :user3_sub_group, :user3_sub_sub_group, :user4_sub_group, :user4_sub_sub_group] - [:shared_from_groups] | :group | [:user1_public_shared_group, :user2_public_shared_group, :user3_public_shared_group, :user4_public_shared_group] - [:direct, :inherited, :descendants, :shared_from_groups] | :group | [:user1_group, :user1_sub_group, :user1_sub_sub_group, :user1_public_shared_group, + [:shared_from_groups] | :group | [:user0_public_shared_group, :user1_public_shared_group, :user2_public_shared_group, :user3_public_shared_group, :user4_public_shared_group] + [:direct, :inherited, :descendants, :shared_from_groups] | :group | [:user0_group, :user0_sub_group, :user0_sub_sub_group, :user0_public_shared_group, + :user1_group, :user1_sub_group, :user1_sub_sub_group, :user1_public_shared_group, :user2_group, :user2_sub_group, :user2_sub_sub_group, :user2_public_shared_group, :user3_group, :user3_sub_group, :user3_sub_sub_group, :user3_public_shared_group, :user4_group, :user4_sub_group, :user4_sub_sub_group, :user4_public_shared_group] [] | :sub_group | [] - GroupMembersFinder::DEFAULT_RELATIONS | :sub_group | [:user1_group, :user1_sub_group, + GroupMembersFinder::DEFAULT_RELATIONS | :sub_group | [:user0_group, :user0_sub_group, + :user1_group, :user1_sub_group, :user2_group, :user2_sub_group, :user3_group, :user3_sub_group, :user4_group, :user4_sub_group] - [:direct] | :sub_group | [:user1_sub_group, :user2_sub_group, :user3_sub_group, :user4_sub_group] - [:inherited] | :sub_group | [:user1_group, :user2_group, :user3_group, :user4_group] - [:descendants] | :sub_group | [:user1_sub_sub_group, :user2_sub_sub_group, :user3_sub_sub_group, :user4_sub_sub_group] - [:shared_from_groups] | :sub_group | [:user1_public_shared_group, :user2_public_shared_group, :user3_public_shared_group, :user4_public_shared_group] - [:direct, :inherited, :descendants, :shared_from_groups] | :sub_group | [:user1_group, :user1_sub_group, :user1_sub_sub_group, :user1_public_shared_group, + [:direct] | :sub_group | [:user0_sub_group, :user1_sub_group, :user2_sub_group, :user3_sub_group, :user4_sub_group] + [:inherited] | :sub_group | [:user0_group, :user1_group, :user2_group, :user3_group, :user4_group] + [:descendants] | :sub_group | [:user0_sub_sub_group, :user1_sub_sub_group, :user2_sub_sub_group, :user3_sub_sub_group, :user4_sub_sub_group] + [:shared_from_groups] | :sub_group | [:user0_public_shared_group, :user1_public_shared_group, :user2_public_shared_group, :user3_public_shared_group, :user4_public_shared_group] + [:direct, :inherited, :descendants, :shared_from_groups] | :sub_group | [:user0_group, :user0_sub_group, :user0_sub_sub_group, :user0_public_shared_group, + :user1_group, :user1_sub_group, :user1_sub_sub_group, :user1_public_shared_group, :user2_group, :user2_sub_group, :user2_sub_sub_group, :user2_public_shared_group, :user3_group, :user3_sub_group, :user3_sub_sub_group, :user3_public_shared_group, :user4_group, :user4_sub_group, :user4_sub_sub_group, :user4_public_shared_group] [] | :sub_sub_group | [] - GroupMembersFinder::DEFAULT_RELATIONS | :sub_sub_group | [:user1_group, :user1_sub_group, :user1_sub_sub_group, + GroupMembersFinder::DEFAULT_RELATIONS | :sub_sub_group | [:user0_group, :user0_sub_group, :user0_sub_sub_group, + :user1_group, :user1_sub_group, :user1_sub_sub_group, :user2_group, :user2_sub_group, :user2_sub_sub_group, :user3_group, :user3_sub_group, :user3_sub_sub_group, :user4_group, :user4_sub_group, :user4_sub_sub_group] - [:direct] | :sub_sub_group | [:user1_sub_sub_group, :user2_sub_sub_group, :user3_sub_sub_group, :user4_sub_sub_group] - [:inherited] | :sub_sub_group | [:user1_group, :user1_sub_group, + [:direct] | :sub_sub_group | [:user0_sub_sub_group, :user1_sub_sub_group, :user2_sub_sub_group, :user3_sub_sub_group, :user4_sub_sub_group] + [:inherited] | :sub_sub_group | [:user0_group, :user0_sub_group, + :user1_group, :user1_sub_group, :user2_group, :user2_sub_group, :user3_group, :user3_sub_group, :user4_group, :user4_sub_group] [:descendants] | :sub_sub_group | [] - [:shared_from_groups] | :sub_sub_group | [:user1_public_shared_group, :user2_public_shared_group, :user3_public_shared_group, :user4_public_shared_group] - [:direct, :inherited, :descendants, :shared_from_groups] | :sub_sub_group | [:user1_group, :user1_sub_group, :user1_sub_sub_group, :user1_public_shared_group, + [:shared_from_groups] | :sub_sub_group | [:user0_public_shared_group, :user1_public_shared_group, :user2_public_shared_group, :user3_public_shared_group, :user4_public_shared_group] + [:direct, :inherited, :descendants, :shared_from_groups] | :sub_sub_group | [:user0_group, :user0_sub_group, :user0_sub_sub_group, :user0_public_shared_group, + :user1_group, :user1_sub_group, :user1_sub_sub_group, :user1_public_shared_group, :user2_group, :user2_sub_group, :user2_sub_sub_group, :user2_public_shared_group, :user3_group, :user3_sub_group, :user3_sub_sub_group, :user3_public_shared_group, :user4_group, :user4_sub_group, :user4_sub_sub_group, :user4_public_shared_group] diff --git a/ee/spec/models/ee/group_member_spec.rb b/ee/spec/models/ee/group_member_spec.rb index 1bd27529c6a8f60993c42ebaa968f4c0c87776f6..7388fb1ce52a5a9e697eb7fe5903fa31238b3e93 100644 --- a/ee/spec/models/ee/group_member_spec.rb +++ b/ee/spec/models/ee/group_member_spec.rb @@ -27,6 +27,7 @@ expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::NO_ACCESS)).to be_invalid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::MINIMAL_ACCESS)).to be_valid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::GUEST)).to be_valid + expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::PLANNER)).to be_valid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::REPORTER)).to be_valid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::DEVELOPER)).to be_valid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::MAINTAINER)).to be_valid @@ -51,6 +52,7 @@ expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::NO_ACCESS)).to be_invalid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::MINIMAL_ACCESS)).to be_invalid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::GUEST)).to be_valid + expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::PLANNER)).to be_valid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::REPORTER)).to be_valid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::DEVELOPER)).to be_valid expect(build(:group_member, group: group, user: create(:user), access_level: ::Gitlab::Access::MAINTAINER)).to be_valid diff --git a/ee/spec/policies/project_policy_spec.rb b/ee/spec/policies/project_policy_spec.rb index fd8c7f7f94d4a8b796728631e183141fc4106e59..09c817bcd828b7170126aed96657db9c77d1171c 100644 --- a/ee/spec/policies/project_policy_spec.rb +++ b/ee/spec/policies/project_policy_spec.rb @@ -2454,6 +2454,7 @@ def expect_private_project_permissions_as_if_non_member expect_disallowed(*guest_permissions) + expect_disallowed(*planner_permissions) expect_disallowed(*reporter_permissions) expect_disallowed(*team_member_reporter_permissions) expect_disallowed(*developer_permissions) diff --git a/ee/spec/services/ee/members/groups/creator_service_spec.rb b/ee/spec/services/ee/members/groups/creator_service_spec.rb index 2cecf0876a0b51a35b1cc458bb47b301b0c932dc..85c33d5b41e2b8ea841db59e19989d3da28c4fbc 100644 --- a/ee/spec/services/ee/members/groups/creator_service_spec.rb +++ b/ee/spec/services/ee/members/groups/creator_service_spec.rb @@ -20,6 +20,7 @@ [ [:guest, Gitlab::Access::GUEST], [:reporter, Gitlab::Access::REPORTER], + [:planner, Gitlab::Access::PLANNER], [:developer, Gitlab::Access::DEVELOPER], [:maintainer, Gitlab::Access::MAINTAINER], [:owner, Gitlab::Access::OWNER] @@ -218,6 +219,13 @@ it_behaves_like 'adding members using custom permission' end + context 'for planner member role' do + let(:current_role) { Gitlab::Access::PLANNER } + let(:higher_role) { Gitlab::Access::REPORTER } + + it_behaves_like 'adding members using custom permission' + end + context 'for reporter member role' do let(:current_role) { Gitlab::Access::REPORTER } let(:higher_role) { Gitlab::Access::DEVELOPER } diff --git a/spec/factories/group_group_links.rb b/spec/factories/group_group_links.rb index 2a582d8525b0d5e1a566943aa40fbe3be88b142e..b4eef48985a9f2e281d91a18508708e9a17b3bdc 100644 --- a/spec/factories/group_group_links.rb +++ b/spec/factories/group_group_links.rb @@ -7,6 +7,7 @@ group_access { Gitlab::Access::DEVELOPER } trait(:guest) { group_access { Gitlab::Access::GUEST } } + trait(:planner) { group_access { Gitlab::Access::PLANNER } } trait(:reporter) { group_access { Gitlab::Access::REPORTER } } trait(:developer) { group_access { Gitlab::Access::DEVELOPER } } trait(:owner) { group_access { Gitlab::Access::OWNER } } diff --git a/spec/features/groups/board_spec.rb b/spec/features/groups/board_spec.rb index a4ceab5812caa20dcbddf5a3c4e387fb65746bef..01559514fbc99f6d8644792a6d2cf4842747eaa2 100644 --- a/spec/features/groups/board_spec.rb +++ b/spec/features/groups/board_spec.rb @@ -45,7 +45,7 @@ end end - context "when user is a Reporter in one of the group's projects", :js do + context "when user is a Planner in one of the group's projects", :js do let_it_be(:board) { create(:board, group: group) } let_it_be(:group_label1) { create(:group_label, title: "bug", group: group) } @@ -60,7 +60,7 @@ before do project1.add_guest(user) - project2.add_reporter(user) + project2.add_planner(user) stub_feature_flags(issues_list_drawer: false) sign_in(user) @@ -69,7 +69,7 @@ end end - it 'allows user to move issue of project where they are a Reporter' do + it 'allows user to move issue of project where they are a Planner' do expect(all('[data-testid="board-list"]')[0]).to have_content(issue2.title) drag(list_from_index: 0, from_index: 0, list_to_index: 1) diff --git a/spec/lib/gitlab/user_access_spec.rb b/spec/lib/gitlab/user_access_spec.rb index a5c01656b290470d3178bad06e85b0867b602929..3ffc1d7a3265ef62595111bde518e8047fb61b3e 100644 --- a/spec/lib/gitlab/user_access_spec.rb +++ b/spec/lib/gitlab/user_access_spec.rb @@ -338,6 +338,12 @@ expect(access.can_push_for_ref?(ref)).to be_falsey end + + it 'is false' do + project.add_member(user, :planner) + + expect(access.can_push_for_ref?(ref)).to be_falsey + end end context 'when user can push_code to a project repository (eg. as a developer)' do diff --git a/spec/models/group_group_link_spec.rb b/spec/models/group_group_link_spec.rb index 29d7eff59b119685564ae10e639983036201b2cf..5d3d468edf317ffa2dac21d4c2b9ac2331b05759 100644 --- a/spec/models/group_group_link_spec.rb +++ b/spec/models/group_group_link_spec.rb @@ -38,6 +38,7 @@ describe 'scopes' do context 'for scopes fetching records based on access levels' do let_it_be(:group_group_link_guest) { create :group_group_link, :guest } + let_it_be(:group_group_link_planner) { create :group_group_link, :planner } let_it_be(:group_group_link_reporter) { create :group_group_link, :reporter } let_it_be(:group_group_link_developer) { create :group_group_link, :developer } let_it_be(:group_group_link_maintainer) { create :group_group_link, :maintainer } @@ -46,7 +47,7 @@ describe '.non_guests' do it 'returns all records which are greater than Guests access' do expect(described_class.non_guests).to match_array([ - group_group_link_reporter, group_group_link_developer, + group_group_link_reporter, group_group_link_planner, group_group_link_developer, group_group_link_maintainer, group_group_link_owner ]) end diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb index d7bf81869c1f30d75247e90da8f6d14fc23a8d0d..aed8c5911e6caa6332ddf29ebcd94add4015f135 100644 --- a/spec/models/project_team_spec.rb +++ b/spec/models/project_team_spec.rb @@ -18,6 +18,7 @@ project.add_maintainer(maintainer) project.add_planner(planner) project.add_reporter(reporter) + project.add_planner(planner) project.add_guest(guest) end @@ -37,8 +38,9 @@ it { expect(project.team.maintainer?(nonmember)).to be_falsey } it { expect(project.team.member?(nonmember)).to be_falsey } it { expect(project.team.member?(guest)).to be_truthy } - it { expect(project.team.member?(planner, Gitlab::Access::PLANNER)).to be_truthy } + it { expect(project.team.member?(planner, Gitlab::Access::REPORTER)).to be_falsey } it { expect(project.team.member?(reporter, Gitlab::Access::REPORTER)).to be_truthy } + it { expect(project.team.member?(planner, Gitlab::Access::PLANNER)).to be_truthy } it { expect(project.team.member?(guest, Gitlab::Access::REPORTER)).to be_falsey } it { expect(project.team.member?(nonmember, Gitlab::Access::GUEST)).to be_falsey } end @@ -77,10 +79,12 @@ it { expect(project.team.maintainer?(maintainer)).to be_truthy } it { expect(project.team.maintainer?(guest)).to be_truthy } it { expect(project.team.maintainer?(reporter)).to be_falsey } + it { expect(project.team.maintainer?(planner)).to be_falsey } it { expect(project.team.maintainer?(nonmember)).to be_falsey } it { expect(project.team.member?(nonmember)).to be_falsey } it { expect(project.team.member?(guest)).to be_truthy } it { expect(project.team.member?(guest, Gitlab::Access::MAINTAINER)).to be_truthy } + it { expect(project.team.member?(planner, Gitlab::Access::MAINTAINER)).to be_falsey } it { expect(project.team.member?(reporter, Gitlab::Access::MAINTAINER)).to be_falsey } it { expect(project.team.member?(nonmember, Gitlab::Access::GUEST)).to be_falsey } end diff --git a/spec/policies/issue_policy_spec.rb b/spec/policies/issue_policy_spec.rb index 442dc9de565ff0f1003f6487a03d3bd2edcbda7b..09d2556bef348f3dab40cc13d36d449abcfee033 100644 --- a/spec/policies/issue_policy_spec.rb +++ b/spec/policies/issue_policy_spec.rb @@ -662,9 +662,9 @@ def permissions(user, issue) end end - context 'and policy allows reporter access' do + context 'and policy allows planner access' do where(:project_level, :feature_access_level, :membership, :admin_mode, :expected_count) do - permission_table_for_reporter_issue_access + permission_table_for_planner_issue_access end with_them do diff --git a/spec/support/shared_contexts/policies/project_policy_table_shared_context.rb b/spec/support/shared_contexts/policies/project_policy_table_shared_context.rb index 04bbbcb1c36d07e8672a4db743a6c4edde7f33e9..05b971639b21d17ecefde230f073c40369f8d4f4 100644 --- a/spec/support/shared_contexts/policies/project_policy_table_shared_context.rb +++ b/spec/support/shared_contexts/policies/project_policy_table_shared_context.rb @@ -24,6 +24,7 @@ def permission_table_for_reporter_feature_access :public | :enabled | :admin | true | 1 :public | :enabled | :admin | false | 1 :public | :enabled | :reporter | nil | 1 + :public | :enabled | :planner | nil | 1 :public | :enabled | :guest | nil | 1 :public | :enabled | :non_member | nil | 1 :public | :enabled | :anonymous | nil | 1 @@ -31,11 +32,13 @@ def permission_table_for_reporter_feature_access :public | :private | :admin | true | 1 :public | :private | :admin | false | 0 :public | :private | :reporter | nil | 1 + :public | :private | :planner | nil | 0 :public | :private | :guest | nil | 0 :public | :private | :non_member | nil | 0 :public | :private | :anonymous | nil | 0 :public | :disabled | :reporter | nil | 0 + :public | :disabled | :planner | nil | 0 :public | :disabled | :guest | nil | 0 :public | :disabled | :non_member | nil | 0 :public | :disabled | :anonymous | nil | 0 @@ -43,6 +46,7 @@ def permission_table_for_reporter_feature_access :internal | :enabled | :admin | true | 1 :internal | :enabled | :admin | false | 1 :internal | :enabled | :reporter | nil | 1 + :internal | :enabled | :planner | nil | 1 :internal | :enabled | :guest | nil | 1 :internal | :enabled | :non_member | nil | 1 :internal | :enabled | :anonymous | nil | 0 @@ -50,11 +54,13 @@ def permission_table_for_reporter_feature_access :internal | :private | :admin | true | 1 :internal | :private | :admin | false | 0 :internal | :private | :reporter | nil | 1 + :internal | :private | :planner | nil | 0 :internal | :private | :guest | nil | 0 :internal | :private | :non_member | nil | 0 :internal | :private | :anonymous | nil | 0 :internal | :disabled | :reporter | nil | 0 + :internal | :disabled | :planner | nil | 0 :internal | :disabled | :guest | nil | 0 :internal | :disabled | :non_member | nil | 0 :internal | :disabled | :anonymous | nil | 0 @@ -62,11 +68,13 @@ def permission_table_for_reporter_feature_access :private | :private | :admin | true | 1 :private | :private | :admin | false | 0 :private | :private | :reporter | nil | 1 + :private | :private | :planner | nil | 0 :private | :private | :guest | nil | 0 :private | :private | :non_member | nil | 0 :private | :private | :anonymous | nil | 0 :private | :disabled | :reporter | nil | 0 + :private | :disabled | :planner | nil | 0 :private | :disabled | :guest | nil | 0 :private | :disabled | :non_member | nil | 0 :private | :disabled | :anonymous | nil | 0 @@ -78,12 +86,14 @@ def permission_table_for_epics_access :public | :admin | true | 1 :public | :admin | false | 1 :public | :reporter | nil | 1 + :public | :planner | nil | 1 :public | :guest | nil | 1 :public | :non_member | nil | 1 :public | :anonymous | nil | 1 :internal | :admin | true | 1 :internal | :admin | false | 1 + :internal | :planner | nil | 1 :internal | :reporter | nil | 1 :internal | :guest | nil | 1 :internal | :non_member | nil | 1 @@ -92,6 +102,7 @@ def permission_table_for_epics_access :private | :admin | true | 1 :private | :admin | false | 0 :private | :reporter | nil | 1 + :private | :planner | nil | 1 :private | :guest | nil | 1 :private | :non_member | nil | 0 :private | :anonymous | nil | 0 @@ -102,6 +113,7 @@ def permission_table_for_guest_feature_access :public | :enabled | :admin | true | 1 :public | :enabled | :admin | false | 1 :public | :enabled | :reporter | nil | 1 + :public | :enabled | :planner | nil | 1 :public | :enabled | :guest | nil | 1 :public | :enabled | :non_member | nil | 1 :public | :enabled | :anonymous | nil | 1 @@ -109,11 +121,13 @@ def permission_table_for_guest_feature_access :public | :private | :admin | true | 1 :public | :private | :admin | false | 0 :public | :private | :reporter | nil | 1 + :public | :private | :planner | nil | 1 :public | :private | :guest | nil | 1 :public | :private | :non_member | nil | 0 :public | :private | :anonymous | nil | 0 :public | :disabled | :reporter | nil | 0 + :public | :disabled | :planner | nil | 0 :public | :disabled | :guest | nil | 0 :public | :disabled | :non_member | nil | 0 :public | :disabled | :anonymous | nil | 0 @@ -121,6 +135,7 @@ def permission_table_for_guest_feature_access :internal | :enabled | :admin | true | 1 :internal | :enabled | :admin | false | 1 :internal | :enabled | :reporter | nil | 1 + :internal | :enabled | :planner | nil | 1 :internal | :enabled | :guest | nil | 1 :internal | :enabled | :non_member | nil | 1 :internal | :enabled | :anonymous | nil | 0 @@ -128,11 +143,13 @@ def permission_table_for_guest_feature_access :internal | :private | :admin | true | 1 :internal | :private | :admin | false | 0 :internal | :private | :reporter | nil | 1 + :internal | :private | :planner | nil | 1 :internal | :private | :guest | nil | 1 :internal | :private | :non_member | nil | 0 :internal | :private | :anonymous | nil | 0 :internal | :disabled | :reporter | nil | 0 + :internal | :disabled | :planner | nil | 0 :internal | :disabled | :guest | nil | 0 :internal | :disabled | :non_member | nil | 0 :internal | :disabled | :anonymous | nil | 0 @@ -140,11 +157,13 @@ def permission_table_for_guest_feature_access :private | :private | :admin | true | 1 :private | :private | :admin | false | 0 :private | :private | :reporter | nil | 1 + :private | :private | :planner | nil | 1 :private | :private | :guest | nil | 1 :private | :private | :non_member | nil | 0 :private | :private | :anonymous | nil | 0 :private | :disabled | :reporter | nil | 0 + :private | :disabled | :planner | nil | 0 :private | :disabled | :guest | nil | 0 :private | :disabled | :non_member | nil | 0 :private | :disabled | :anonymous | nil | 0 @@ -159,6 +178,7 @@ def permission_table_for_notes_feature_access :public | :enabled | :admin | true | 2 :public | :enabled | :admin | false | 1 :public | :enabled | :reporter | nil | 2 + :public | :enabled | :planner | nil | 2 :public | :enabled | :guest | nil | 1 :public | :enabled | :non_member | nil | 1 :public | :enabled | :anonymous | nil | 1 @@ -166,11 +186,13 @@ def permission_table_for_notes_feature_access :public | :private | :admin | true | 2 :public | :private | :admin | false | 0 :public | :private | :reporter | nil | 2 + :public | :private | :planner | nil | 2 :public | :private | :guest | nil | 1 :public | :private | :non_member | nil | 0 :public | :private | :anonymous | nil | 0 :public | :disabled | :reporter | nil | 0 + :public | :disabled | :planner | nil | 0 :public | :disabled | :guest | nil | 0 :public | :disabled | :non_member | nil | 0 :public | :disabled | :anonymous | nil | 0 @@ -185,11 +207,13 @@ def permission_table_for_notes_feature_access :internal | :private | :admin | true | 2 :internal | :private | :admin | false | 0 :internal | :private | :reporter | nil | 2 + :internal | :private | :planner | nil | 2 :internal | :private | :guest | nil | 1 :internal | :private | :non_member | nil | 0 :internal | :private | :anonymous | nil | 0 :internal | :disabled | :reporter | nil | 0 + :internal | :disabled | :planner | nil | 0 :internal | :disabled | :guest | nil | 0 :internal | :disabled | :non_member | nil | 0 :internal | :disabled | :anonymous | nil | 0 @@ -197,11 +221,13 @@ def permission_table_for_notes_feature_access :private | :private | :admin | true | 2 :private | :private | :admin | false | 0 :private | :private | :reporter | nil | 2 + :private | :private | :planner | nil | 2 :private | :private | :guest | nil | 1 :private | :private | :non_member | nil | 0 :private | :private | :anonymous | nil | 0 :private | :disabled | :reporter | nil | 0 + :private | :disabled | :planner | nil | 0 :private | :disabled | :guest | nil | 0 :private | :disabled | :non_member | nil | 0 :private | :disabled | :anonymous | nil | 0 @@ -221,6 +247,7 @@ def permission_table_for_guest_feature_access_and_non_private_project_only :public | :enabled | :admin | true | 1 :public | :enabled | :admin | false | 1 :public | :enabled | :reporter | nil | 1 + :public | :enabled | :planner | nil | 1 :public | :enabled | :guest | nil | 1 :public | :enabled | :non_member | nil | 1 :public | :enabled | :anonymous | nil | 1 @@ -228,11 +255,13 @@ def permission_table_for_guest_feature_access_and_non_private_project_only :public | :private | :admin | true | 1 :public | :private | :admin | false | 0 :public | :private | :reporter | nil | 1 + :public | :private | :planner | nil | 1 :public | :private | :guest | nil | 1 :public | :private | :non_member | nil | 0 :public | :private | :anonymous | nil | 0 :public | :disabled | :reporter | nil | 0 + :public | :disabled | :planner | nil | 0 :public | :disabled | :guest | nil | 0 :public | :disabled | :non_member | nil | 0 :public | :disabled | :anonymous | nil | 0 @@ -240,6 +269,7 @@ def permission_table_for_guest_feature_access_and_non_private_project_only :internal | :enabled | :admin | true | 1 :internal | :enabled | :admin | false | 1 :internal | :enabled | :reporter | nil | 1 + :internal | :enabled | :planner | nil | 1 :internal | :enabled | :guest | nil | 1 :internal | :enabled | :non_member | nil | 1 :internal | :enabled | :anonymous | nil | 0 @@ -247,11 +277,13 @@ def permission_table_for_guest_feature_access_and_non_private_project_only :internal | :private | :admin | true | 1 :internal | :private | :admin | false | 0 :internal | :private | :reporter | nil | 1 + :internal | :private | :planner | nil | 1 :internal | :private | :guest | nil | 1 :internal | :private | :non_member | nil | 0 :internal | :private | :anonymous | nil | 0 :internal | :disabled | :reporter | nil | 0 + :internal | :disabled | :planner | nil | 0 :internal | :disabled | :guest | nil | 0 :internal | :disabled | :non_member | nil | 0 :internal | :disabled | :anonymous | nil | 0 @@ -259,11 +291,13 @@ def permission_table_for_guest_feature_access_and_non_private_project_only :private | :private | :admin | true | 1 :private | :private | :admin | false | 0 :private | :private | :reporter | nil | 1 + :private | :private | :planner | nil | 1 :private | :private | :guest | nil | 0 :private | :private | :non_member | nil | 0 :private | :private | :anonymous | nil | 0 :private | :disabled | :reporter | nil | 0 + :private | :disabled | :planner | nil | 0 :private | :disabled | :guest | nil | 0 :private | :disabled | :non_member | nil | 0 :private | :disabled | :anonymous | nil | 0 @@ -274,6 +308,7 @@ def permission_table_for_milestone_access :public | :enabled | :enabled | :admin | true | 1 :public | :enabled | :enabled | :admin | false | 1 :public | :enabled | :enabled | :reporter | nil | 1 + :public | :enabled | :enabled | :planner | nil | 1 :public | :enabled | :enabled | :guest | nil | 1 :public | :enabled | :enabled | :non_member | nil | 1 :public | :enabled | :enabled | :anonymous | nil | 1 @@ -281,6 +316,7 @@ def permission_table_for_milestone_access :public | :enabled | :private | :admin | true | 1 :public | :enabled | :private | :admin | false | 1 :public | :enabled | :private | :reporter | nil | 1 + :public | :enabled | :private | :planner | nil | 1 :public | :enabled | :private | :guest | nil | 1 :public | :enabled | :private | :non_member | nil | 1 :public | :enabled | :private | :anonymous | nil | 1 @@ -288,6 +324,7 @@ def permission_table_for_milestone_access :public | :enabled | :disabled | :admin | true | 1 :public | :enabled | :disabled | :admin | false | 1 :public | :enabled | :disabled | :reporter | nil | 1 + :public | :enabled | :disabled | :planner | nil | 1 :public | :enabled | :disabled | :guest | nil | 1 :public | :enabled | :disabled | :non_member | nil | 1 :public | :enabled | :disabled | :anonymous | nil | 1 @@ -295,6 +332,7 @@ def permission_table_for_milestone_access :public | :private | :enabled | :admin | true | 1 :public | :private | :enabled | :admin | false | 1 :public | :private | :enabled | :reporter | nil | 1 + :public | :private | :enabled | :planner | nil | 1 :public | :private | :enabled | :guest | nil | 1 :public | :private | :enabled | :non_member | nil | 1 :public | :private | :enabled | :anonymous | nil | 1 @@ -302,6 +340,7 @@ def permission_table_for_milestone_access :public | :private | :private | :admin | true | 1 :public | :private | :private | :admin | false | 0 :public | :private | :private | :reporter | nil | 1 + :public | :private | :private | :planner | nil | 1 :public | :private | :private | :guest | nil | 1 :public | :private | :private | :non_member | nil | 0 :public | :private | :private | :anonymous | nil | 0 @@ -309,6 +348,7 @@ def permission_table_for_milestone_access :public | :private | :disabled | :admin | true | 1 :public | :private | :disabled | :admin | false | 0 :public | :private | :disabled | :reporter | nil | 1 + :public | :private | :disabled | :planner | nil | 1 :public | :private | :disabled | :guest | nil | 1 :public | :private | :disabled | :non_member | nil | 0 :public | :private | :disabled | :anonymous | nil | 0 @@ -316,6 +356,7 @@ def permission_table_for_milestone_access :public | :disabled | :enabled | :admin | true | 1 :public | :disabled | :enabled | :admin | false | 1 :public | :disabled | :enabled | :reporter | nil | 1 + :public | :disabled | :enabled | :planner | nil | 1 :public | :disabled | :enabled | :guest | nil | 1 :public | :disabled | :enabled | :non_member | nil | 1 :public | :disabled | :enabled | :anonymous | nil | 1 @@ -323,11 +364,13 @@ def permission_table_for_milestone_access :public | :disabled | :private | :admin | true | 1 :public | :disabled | :private | :admin | false | 0 :public | :disabled | :private | :reporter | nil | 1 + :public | :disabled | :private | :planner | nil | 1 :public | :disabled | :private | :guest | nil | 0 :public | :disabled | :private | :non_member | nil | 0 :public | :disabled | :private | :anonymous | nil | 0 :public | :disabled | :disabled | :reporter | nil | 0 + :public | :disabled | :disabled | :planner | nil | 0 :public | :disabled | :disabled | :guest | nil | 0 :public | :disabled | :disabled | :non_member | nil | 0 :public | :disabled | :disabled | :anonymous | nil | 0 @@ -335,6 +378,7 @@ def permission_table_for_milestone_access :internal | :enabled | :enabled | :admin | true | 1 :internal | :enabled | :enabled | :admin | false | 1 :internal | :enabled | :enabled | :reporter | nil | 1 + :internal | :enabled | :enabled | :planner | nil | 1 :internal | :enabled | :enabled | :guest | nil | 1 :internal | :enabled | :enabled | :non_member | nil | 1 :internal | :enabled | :enabled | :anonymous | nil | 0 @@ -342,6 +386,7 @@ def permission_table_for_milestone_access :internal | :enabled | :private | :admin | true | 1 :internal | :enabled | :private | :admin | false | 1 :internal | :enabled | :private | :reporter | nil | 1 + :internal | :enabled | :private | :planner | nil | 1 :internal | :enabled | :private | :guest | nil | 1 :internal | :enabled | :private | :non_member | nil | 1 :internal | :enabled | :private | :anonymous | nil | 0 @@ -349,6 +394,7 @@ def permission_table_for_milestone_access :internal | :enabled | :disabled | :admin | true | 1 :internal | :enabled | :disabled | :admin | false | 1 :internal | :enabled | :disabled | :reporter | nil | 1 + :internal | :enabled | :disabled | :planner | nil | 1 :internal | :enabled | :disabled | :guest | nil | 1 :internal | :enabled | :disabled | :non_member | nil | 1 :internal | :enabled | :disabled | :anonymous | nil | 0 @@ -356,6 +402,7 @@ def permission_table_for_milestone_access :internal | :private | :enabled | :admin | true | 1 :internal | :private | :enabled | :admin | false | 1 :internal | :private | :enabled | :reporter | nil | 1 + :internal | :private | :enabled | :planner | nil | 1 :internal | :private | :enabled | :guest | nil | 1 :internal | :private | :enabled | :non_member | nil | 1 :internal | :private | :enabled | :anonymous | nil | 0 @@ -363,6 +410,7 @@ def permission_table_for_milestone_access :internal | :private | :private | :admin | true | 1 :internal | :private | :private | :admin | false | 0 :internal | :private | :private | :reporter | nil | 1 + :internal | :private | :private | :planner | nil | 1 :internal | :private | :private | :guest | nil | 1 :internal | :private | :private | :non_member | nil | 0 :internal | :private | :private | :anonymous | nil | 0 @@ -370,6 +418,7 @@ def permission_table_for_milestone_access :internal | :private | :disabled | :admin | true | 1 :internal | :private | :disabled | :admin | false | 0 :internal | :private | :disabled | :reporter | nil | 1 + :internal | :private | :disabled | :planner | nil | 1 :internal | :private | :disabled | :guest | nil | 1 :internal | :private | :disabled | :non_member | nil | 0 :internal | :private | :disabled | :anonymous | nil | 0 @@ -377,6 +426,7 @@ def permission_table_for_milestone_access :internal | :disabled | :enabled | :admin | true | 1 :internal | :disabled | :enabled | :admin | false | 1 :internal | :disabled | :enabled | :reporter | nil | 1 + :internal | :disabled | :enabled | :planner | nil | 1 :internal | :disabled | :enabled | :guest | nil | 1 :internal | :disabled | :enabled | :non_member | nil | 1 :internal | :disabled | :enabled | :anonymous | nil | 0 @@ -384,11 +434,13 @@ def permission_table_for_milestone_access :internal | :disabled | :private | :admin | true | 1 :internal | :disabled | :private | :admin | false | 0 :internal | :disabled | :private | :reporter | nil | 1 + :internal | :disabled | :private | :planner | nil | 1 :internal | :disabled | :private | :guest | nil | 0 :internal | :disabled | :private | :non_member | nil | 0 :internal | :disabled | :private | :anonymous | nil | 0 :internal | :disabled | :disabled | :reporter | nil | 0 + :internal | :disabled | :disabled | :planner | nil | 0 :internal | :disabled | :disabled | :guest | nil | 0 :internal | :disabled | :disabled | :non_member | nil | 0 :internal | :disabled | :disabled | :anonymous | nil | 0 @@ -396,6 +448,7 @@ def permission_table_for_milestone_access :private | :private | :private | :admin | true | 1 :private | :private | :private | :admin | false | 0 :private | :private | :private | :reporter | nil | 1 + :private | :private | :private | :planner | nil | 1 :private | :private | :private | :guest | nil | 1 :private | :private | :private | :non_member | nil | 0 :private | :private | :private | :anonymous | nil | 0 @@ -403,6 +456,7 @@ def permission_table_for_milestone_access :private | :private | :disabled | :admin | true | 1 :private | :private | :disabled | :admin | false | 0 :private | :private | :disabled | :reporter | nil | 1 + :private | :private | :disabled | :planner | nil | 1 :private | :private | :disabled | :guest | nil | 1 :private | :private | :disabled | :non_member | nil | 0 :private | :private | :disabled | :anonymous | nil | 0 @@ -410,11 +464,13 @@ def permission_table_for_milestone_access :private | :disabled | :private | :admin | true | 1 :private | :disabled | :private | :admin | false | 0 :private | :disabled | :private | :reporter | nil | 1 + :private | :disabled | :private | :planner | nil | 1 :private | :disabled | :private | :guest | nil | 0 :private | :disabled | :private | :non_member | nil | 0 :private | :disabled | :private | :anonymous | nil | 0 :private | :disabled | :disabled | :reporter | nil | 0 + :private | :disabled | :disabled | :planner | nil | 0 :private | :disabled | :disabled | :guest | nil | 0 :private | :disabled | :disabled | :non_member | nil | 0 :private | :disabled | :disabled | :anonymous | nil | 0 @@ -423,16 +479,19 @@ def permission_table_for_milestone_access # :project_level, :membership, :expected_count def permission_table_for_project_access :public | :reporter | 1 + :public | :planner | 1 :public | :guest | 1 :public | :non_member | 1 :public | :anonymous | 1 :internal | :reporter | 1 + :internal | :planner | 1 :internal | :guest | 1 :internal | :non_member | 1 :internal | :anonymous | 0 :private | :reporter | 1 + :private | :planner | 1 :private | :guest | 1 :private | :non_member | 0 :private | :anonymous | 0 @@ -443,6 +502,7 @@ def permission_table_for_project_snippet_access :public | :public | :enabled | :admin | true | 1 :public | :public | :enabled | :admin | false | 1 :public | :public | :enabled | :reporter | nil | 1 + :public | :public | :enabled | :planner | nil | 1 :public | :public | :enabled | :guest | nil | 1 :public | :public | :enabled | :non_member | nil | 1 :public | :public | :enabled | :anonymous | nil | 1 @@ -450,6 +510,7 @@ def permission_table_for_project_snippet_access :public | :public | :private | :admin | true | 1 :public | :public | :private | :admin | false | 0 :public | :public | :private | :reporter | nil | 1 + :public | :public | :private | :planner | nil | 1 :public | :public | :private | :guest | nil | 1 :public | :public | :private | :non_member | nil | 0 :public | :public | :private | :anonymous | nil | 0 @@ -457,6 +518,7 @@ def permission_table_for_project_snippet_access :public | :public | :disabled | :admin | true | 1 :public | :public | :disabled | :admin | false | 0 :public | :public | :disabled | :reporter | nil | 0 + :public | :public | :disabled | :planner | nil | 0 :public | :public | :disabled | :guest | nil | 0 :public | :public | :disabled | :non_member | nil | 0 :public | :public | :disabled | :anonymous | nil | 0 @@ -464,6 +526,7 @@ def permission_table_for_project_snippet_access :public | :internal | :enabled | :admin | true | 1 :public | :internal | :enabled | :admin | false | 1 :public | :internal | :enabled | :reporter | nil | 1 + :public | :internal | :enabled | :planner | nil | 1 :public | :internal | :enabled | :guest | nil | 1 :public | :internal | :enabled | :non_member | nil | 1 :public | :internal | :enabled | :anonymous | nil | 0 @@ -471,6 +534,7 @@ def permission_table_for_project_snippet_access :public | :internal | :private | :admin | true | 1 :public | :internal | :private | :admin | false | 0 :public | :internal | :private | :reporter | nil | 1 + :public | :internal | :private | :planner | nil | 1 :public | :internal | :private | :guest | nil | 1 :public | :internal | :private | :non_member | nil | 0 :public | :internal | :private | :anonymous | nil | 0 @@ -478,6 +542,7 @@ def permission_table_for_project_snippet_access :public | :internal | :disabled | :admin | true | 1 :public | :internal | :disabled | :admin | false | 0 :public | :internal | :disabled | :reporter | nil | 0 + :public | :internal | :disabled | :planner | nil | 0 :public | :internal | :disabled | :guest | nil | 0 :public | :internal | :disabled | :non_member | nil | 0 :public | :internal | :disabled | :anonymous | nil | 0 @@ -485,18 +550,21 @@ def permission_table_for_project_snippet_access :public | :private | :private | :admin | true | 1 :public | :private | :private | :admin | false | 0 :public | :private | :private | :reporter | nil | 1 + :public | :private | :private | :planner | nil | 1 :public | :private | :private | :guest | nil | 1 :public | :private | :private | :non_member | nil | 0 :public | :private | :private | :anonymous | nil | 0 :public | :private | :disabled | :reporter | nil | 0 :public | :private | :disabled | :guest | nil | 0 + :public | :private | :disabled | :planner | nil | 0 :public | :private | :disabled | :non_member | nil | 0 :public | :private | :disabled | :anonymous | nil | 0 :internal | :public | :enabled | :admin | true | 1 :internal | :public | :enabled | :admin | false | 1 :internal | :public | :enabled | :reporter | nil | 1 + :internal | :public | :enabled | :planner | nil | 1 :internal | :public | :enabled | :guest | nil | 1 :internal | :public | :enabled | :non_member | nil | 1 :internal | :public | :enabled | :anonymous | nil | 0 @@ -504,6 +572,7 @@ def permission_table_for_project_snippet_access :internal | :public | :private | :admin | true | 1 :internal | :public | :private | :admin | false | 0 :internal | :public | :private | :reporter | nil | 1 + :internal | :public | :private | :planner | nil | 1 :internal | :public | :private | :guest | nil | 1 :internal | :public | :private | :non_member | nil | 0 :internal | :public | :private | :anonymous | nil | 0 @@ -511,6 +580,7 @@ def permission_table_for_project_snippet_access :internal | :public | :disabled | :admin | true | 1 :internal | :public | :disabled | :admin | false | 0 :internal | :public | :disabled | :reporter | nil | 0 + :internal | :public | :disabled | :planner | nil | 0 :internal | :public | :disabled | :guest | nil | 0 :internal | :public | :disabled | :non_member | nil | 0 :internal | :public | :disabled | :anonymous | nil | 0 @@ -518,6 +588,7 @@ def permission_table_for_project_snippet_access :internal | :internal | :enabled | :admin | true | 1 :internal | :internal | :enabled | :admin | false | 1 :internal | :internal | :enabled | :reporter | nil | 1 + :internal | :internal | :enabled | :planner | nil | 1 :internal | :internal | :enabled | :guest | nil | 1 :internal | :internal | :enabled | :non_member | nil | 1 :internal | :internal | :enabled | :anonymous | nil | 0 @@ -525,6 +596,7 @@ def permission_table_for_project_snippet_access :internal | :internal | :private | :admin | true | 1 :internal | :internal | :private | :admin | false | 0 :internal | :internal | :private | :reporter | nil | 1 + :internal | :internal | :private | :planner | nil | 1 :internal | :internal | :private | :guest | nil | 1 :internal | :internal | :private | :non_member | nil | 0 :internal | :internal | :private | :anonymous | nil | 0 @@ -532,6 +604,7 @@ def permission_table_for_project_snippet_access :internal | :internal | :disabled | :admin | true | 1 :internal | :internal | :disabled | :admin | false | 0 :internal | :internal | :disabled | :reporter | nil | 0 + :internal | :internal | :disabled | :planner | nil | 0 :internal | :internal | :disabled | :guest | nil | 0 :internal | :internal | :disabled | :non_member | nil | 0 :internal | :internal | :disabled | :anonymous | nil | 0 @@ -539,6 +612,7 @@ def permission_table_for_project_snippet_access :internal | :private | :private | :admin | true | 1 :internal | :private | :private | :admin | false | 0 :internal | :private | :private | :reporter | nil | 1 + :internal | :private | :private | :planner | nil | 1 :internal | :private | :private | :guest | nil | 1 :internal | :private | :private | :non_member | nil | 0 :internal | :private | :private | :anonymous | nil | 0 @@ -546,6 +620,7 @@ def permission_table_for_project_snippet_access :internal | :private | :disabled | :admin | true | 1 :internal | :private | :disabled | :admin | false | 0 :internal | :private | :disabled | :reporter | nil | 0 + :internal | :private | :disabled | :planner | nil | 0 :internal | :private | :disabled | :guest | nil | 0 :internal | :private | :disabled | :non_member | nil | 0 :internal | :private | :disabled | :anonymous | nil | 0 @@ -553,6 +628,7 @@ def permission_table_for_project_snippet_access :private | :public | :enabled | :admin | true | 1 :private | :public | :enabled | :admin | false | 0 :private | :public | :enabled | :reporter | nil | 1 + :private | :public | :enabled | :planner | nil | 1 :private | :public | :enabled | :guest | nil | 1 :private | :public | :enabled | :non_member | nil | 0 :private | :public | :enabled | :anonymous | nil | 0 @@ -560,6 +636,7 @@ def permission_table_for_project_snippet_access :private | :public | :private | :admin | true | 1 :private | :public | :private | :admin | false | 0 :private | :public | :private | :reporter | nil | 1 + :private | :public | :private | :planner | nil | 1 :private | :public | :private | :guest | nil | 1 :private | :public | :private | :non_member | nil | 0 :private | :public | :private | :anonymous | nil | 0 @@ -567,6 +644,7 @@ def permission_table_for_project_snippet_access :private | :public | :disabled | :admin | true | 1 :private | :public | :disabled | :admin | false | 0 :private | :public | :disabled | :reporter | nil | 0 + :private | :public | :disabled | :planner | nil | 0 :private | :public | :disabled | :guest | nil | 0 :private | :public | :disabled | :non_member | nil | 0 :private | :public | :disabled | :anonymous | nil | 0 @@ -574,6 +652,7 @@ def permission_table_for_project_snippet_access :private | :internal | :enabled | :admin | true | 1 :private | :internal | :enabled | :admin | false | 0 :private | :internal | :enabled | :reporter | nil | 1 + :private | :internal | :enabled | :planner | nil | 1 :private | :internal | :enabled | :guest | nil | 1 :private | :internal | :enabled | :non_member | nil | 0 :private | :internal | :enabled | :anonymous | nil | 0 @@ -581,6 +660,7 @@ def permission_table_for_project_snippet_access :private | :internal | :private | :admin | true | 1 :private | :internal | :private | :admin | false | 0 :private | :internal | :private | :reporter | nil | 1 + :private | :internal | :private | :planner | nil | 1 :private | :internal | :private | :guest | nil | 1 :private | :internal | :private | :non_member | nil | 0 :private | :internal | :private | :anonymous | nil | 0 @@ -588,6 +668,7 @@ def permission_table_for_project_snippet_access :private | :internal | :disabled | :admin | true | 1 :private | :internal | :disabled | :admin | false | 0 :private | :internal | :disabled | :reporter | nil | 0 + :private | :internal | :disabled | :planner | nil | 0 :private | :internal | :disabled | :guest | nil | 0 :private | :internal | :disabled | :non_member | nil | 0 :private | :internal | :disabled | :anonymous | nil | 0 @@ -595,6 +676,7 @@ def permission_table_for_project_snippet_access :private | :private | :private | :admin | true | 1 :private | :private | :private | :admin | false | 0 :private | :private | :private | :reporter | nil | 1 + :private | :private | :private | :planner | nil | 1 :private | :private | :private | :guest | nil | 1 :private | :private | :private | :non_member | nil | 0 :private | :private | :private | :anonymous | nil | 0 @@ -602,6 +684,7 @@ def permission_table_for_project_snippet_access :private | :private | :disabled | :admin | true | 1 :private | :private | :disabled | :admin | false | 0 :private | :private | :disabled | :reporter | nil | 0 + :private | :private | :disabled | :planner | nil | 0 :private | :private | :disabled | :guest | nil | 0 :private | :private | :disabled | :non_member | nil | 0 :private | :private | :disabled | :anonymous | nil | 0 @@ -630,13 +713,14 @@ def permission_table_for_personal_snippet_access # Based on the permission_table_for_reporter_feature_access table, but for issue # features where public and internal projects with issues enabled only allow - # access to reporters and above (excluding admins if admin mode is disabled) + # access to planners and above (excluding admins if admin mode is disabled) # # project_level, :feature_access_level, :membership, :admin_mode, :expected_count - def permission_table_for_reporter_issue_access + def permission_table_for_planner_issue_access :public | :enabled | :admin | true | 1 :public | :enabled | :admin | false | 0 :public | :enabled | :reporter | nil | 1 + :public | :enabled | :planner | nil | 1 :public | :enabled | :guest | nil | 0 :public | :enabled | :non_member | nil | 0 :public | :enabled | :anonymous | nil | 0 @@ -644,11 +728,13 @@ def permission_table_for_reporter_issue_access :public | :private | :admin | true | 1 :public | :private | :admin | false | 0 :public | :private | :reporter | nil | 1 + :public | :private | :planner | nil | 1 :public | :private | :guest | nil | 0 :public | :private | :non_member | nil | 0 :public | :private | :anonymous | nil | 0 :public | :disabled | :reporter | nil | 0 + :public | :disabled | :planner | nil | 0 :public | :disabled | :guest | nil | 0 :public | :disabled | :non_member | nil | 0 :public | :disabled | :anonymous | nil | 0 @@ -656,6 +742,7 @@ def permission_table_for_reporter_issue_access :internal | :enabled | :admin | true | 1 :internal | :enabled | :admin | false | 0 :internal | :enabled | :reporter | nil | 1 + :internal | :enabled | :planner | nil | 1 :internal | :enabled | :guest | nil | 0 :internal | :enabled | :non_member | nil | 0 :internal | :enabled | :anonymous | nil | 0 @@ -663,11 +750,13 @@ def permission_table_for_reporter_issue_access :internal | :private | :admin | true | 1 :internal | :private | :admin | false | 0 :internal | :private | :reporter | nil | 1 + :internal | :private | :planner | nil | 1 :internal | :private | :guest | nil | 0 :internal | :private | :non_member | nil | 0 :internal | :private | :anonymous | nil | 0 :internal | :disabled | :reporter | nil | 0 + :internal | :disabled | :planner | nil | 0 :internal | :disabled | :guest | nil | 0 :internal | :disabled | :non_member | nil | 0 :internal | :disabled | :anonymous | nil | 0 @@ -675,11 +764,13 @@ def permission_table_for_reporter_issue_access :private | :private | :admin | true | 1 :private | :private | :admin | false | 0 :private | :private | :reporter | nil | 1 + :private | :private | :planner | nil | 1 :private | :private | :guest | nil | 0 :private | :private | :non_member | nil | 0 :private | :private | :anonymous | nil | 0 :private | :disabled | :reporter | nil | 0 + :private | :disabled | :planner | nil | 0 :private | :disabled | :guest | nil | 0 :private | :disabled | :non_member | nil | 0 :private | :disabled | :anonymous | nil | 0