diff --git a/app/assets/javascripts/access_level/constants.js b/app/assets/javascripts/access_level/constants.js index 619dc246829256e05331efd8f36f58c07e40ee02..7dc1d0e51e4c55267de5f5f2bec7040e7e509db4 100644 --- a/app/assets/javascripts/access_level/constants.js +++ b/app/assets/javascripts/access_level/constants.js @@ -25,6 +25,11 @@ export const BASE_ROLES = [ { value: 'OWNER', text: ACCESS_LEVEL_OWNER }, ]; +export const BASE_ROLES_INC_MINIMAL_ACCESS = [ + { value: 'MINIMAL_ACCESS', text: ACCESS_LEVEL_MINIMAL_ACCESS }, + ...BASE_ROLES, +]; + export const ACCESS_LEVEL_LABELS = { [ACCESS_LEVEL_NO_ACCESS_INTEGER]: ACCESS_LEVEL_NO_ACCESS, [ACCESS_LEVEL_MINIMAL_ACCESS_INTEGER]: ACCESS_LEVEL_MINIMAL_ACCESS, diff --git a/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue b/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue index 4e5cef5e3717f52c3f9e760a4ea3ce0ca0501e5c..2dc204ac79e53295c2d68b2b2de3383e4e24d996 100644 --- a/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue +++ b/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue @@ -14,7 +14,7 @@ import { import { difference, pull } from 'lodash'; import { createAlert } from '~/alert'; import { sprintf, s__, __ } from '~/locale'; -import { BASE_ROLES } from '~/access_level/constants'; +import { BASE_ROLES_INC_MINIMAL_ACCESS } from '~/access_level/constants'; import memberRolePermissionsQuery from 'ee/roles_and_permissions/graphql/member_role_permissions.query.graphql'; import { visitUrl } from '~/lib/utils/url_utility'; import { helpPagePath } from '~/helpers/help_page_helper'; @@ -217,7 +217,7 @@ export default { } }, }, - BASE_ROLES, + BASE_ROLES_INC_MINIMAL_ACCESS, }; </script> @@ -278,7 +278,7 @@ export default { id="base-role-select" v-model="baseRole" width="md" - :options="$options.BASE_ROLES" + :options="$options.BASE_ROLES_INC_MINIMAL_ACCESS" :state="baseRoleValid" /> </gl-form-group> diff --git a/ee/app/models/members/member_role.rb b/ee/app/models/members/member_role.rb index f15f5d9cf46af0647cb1e37f5f3e1358bf7a3a41..aad98fc69b6f8ea62cf23f86aa3da1a209f97fc6 100644 --- a/ee/app/models/members/member_role.rb +++ b/ee/app/models/members/member_role.rb @@ -6,7 +6,9 @@ class MemberRole < ApplicationRecord # rubocop:disable Gitlab/NamespacedClass MAX_COUNT_PER_GROUP_HIERARCHY = 10 - LEVELS = ::Gitlab::Access.options_with_owner.values.freeze + # base_access_level is validated against this array, + # so a migration may be needed if you change it + LEVELS = ::Gitlab::Access.options_with_minimal_access.values.freeze has_many :members has_many :saml_providers diff --git a/ee/spec/frontend/roles_and_permissions/components/create_member_role_spec.js b/ee/spec/frontend/roles_and_permissions/components/create_member_role_spec.js index 1a46cc9b1d0d1b2f69d7841276e726f38dd2b52e..092875b3684c7ee2bfc90df2a0604b49a80139b3 100644 --- a/ee/spec/frontend/roles_and_permissions/components/create_member_role_spec.js +++ b/ee/spec/frontend/roles_and_permissions/components/create_member_role_spec.js @@ -88,6 +88,7 @@ describe('CreateMemberRole', () => { createComponent({ stubs }); expect(findSelect().props('options')).toEqual([ + { value: 'MINIMAL_ACCESS', text: 'Minimal Access' }, { value: 'GUEST', text: 'Guest' }, { value: 'REPORTER', text: 'Reporter' }, { value: 'DEVELOPER', text: 'Developer' }, diff --git a/ee/spec/models/members/member_role_spec.rb b/ee/spec/models/members/member_role_spec.rb index b6f0626499a60da132db204f6c3fac229b9a0d4c..709b029faa37f5e8a0d4171481c5b0eef3ac50aa 100644 --- a/ee/spec/models/members/member_role_spec.rb +++ b/ee/spec/models/members/member_role_spec.rb @@ -17,7 +17,11 @@ it { is_expected.to validate_presence_of(:name) } it { is_expected.to validate_presence_of(:base_access_level) } - it { is_expected.to validate_inclusion_of(:base_access_level).in_array(described_class::LEVELS) } + + it do + is_expected.to validate_inclusion_of(:base_access_level) + .in_array(::Gitlab::Access.options_with_minimal_access.values.freeze) + end describe 'name uniqueness validation' do let_it_be(:group) { create(:group) }