diff --git a/app/views/groups/settings/_permissions.html.haml b/app/views/groups/settings/_permissions.html.haml index a3af4615561d6a30b1b733543004e84837c5eed7..400850df9cb8a3eddf1cc92970b1ff9b1a4058f7 100644 --- a/app/views/groups/settings/_permissions.html.haml +++ b/app/views/groups/settings/_permissions.html.haml @@ -61,5 +61,6 @@ = render_if_exists 'groups/settings/pages_access_control', f: f, group: @group = render_if_exists 'groups/settings/crm', f: f, group: @group = render_if_exists 'groups/settings/secret_manager', f: f, group: @group + = render_if_exists 'groups/settings/gitlab_credits_dashboard', f: f, group: @group = f.submit _('Save changes'), pajamas_button: true, class: 'gl-mt-3', data: { testid: 'save-permissions-changes-button' } diff --git a/ee/app/controllers/concerns/ee/groups/params.rb b/ee/app/controllers/concerns/ee/groups/params.rb index 1966142578c6c6e77c9b3decbf426fe90edc781b..991e5ba4a33f6c288df73f5cecc10b29e10edb19 100644 --- a/ee/app/controllers/concerns/ee/groups/params.rb +++ b/ee/app/controllers/concerns/ee/groups/params.rb @@ -105,6 +105,8 @@ def group_params_ee params_ee << :allow_enterprise_bypass_placeholder_confirmation params_ee << :enterprise_bypass_expires_at end + + params_ee << :display_gitlab_credits_user_data if current_group&.feature_available?(:group_usage_billing) end end # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize diff --git a/ee/app/services/ee/groups/create_service.rb b/ee/app/services/ee/groups/create_service.rb index 3f48f52c36fca8bbd6c22c2e2dfd80565dd4c27c..ed671f4738f04affb8c4539480ae47b6fd12663e 100644 --- a/ee/app/services/ee/groups/create_service.rb +++ b/ee/app/services/ee/groups/create_service.rb @@ -56,6 +56,7 @@ def remove_unallowed_params params.delete(:repository_size_limit) unless current_user&.can_admin_all_resources? params.delete(:remove_dormant_members) params.delete(:remove_dormant_members_period) + params.delete(:display_gitlab_credits_user_data) super end diff --git a/ee/app/services/ee/groups/update_service.rb b/ee/app/services/ee/groups/update_service.rb index 6f138c819bb1230bda135b6fa873ef512f346106..61e896120347ff238989300218db77cf755076f9 100644 --- a/ee/app/services/ee/groups/update_service.rb +++ b/ee/app/services/ee/groups/update_service.rb @@ -10,7 +10,8 @@ module UpdateService :remove_dormant_members_period, :allow_enterprise_bypass_placeholder_confirmation, :enterprise_bypass_expires_at, - :enabled_foundational_flows + :enabled_foundational_flows, + :display_gitlab_credits_user_data ].freeze override :execute diff --git a/ee/app/views/groups/settings/_gitlab_credits_dashboard.html.haml b/ee/app/views/groups/settings/_gitlab_credits_dashboard.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..2963abf2255b8bd13e90512b425f316b567612c6 --- /dev/null +++ b/ee/app/views/groups/settings/_gitlab_credits_dashboard.html.haml @@ -0,0 +1,10 @@ +- return unless Feature.enabled?(:usage_billing_dev, @group) +- return unless ::Gitlab::Saas.feature_available?(:gitlab_com_subscriptions) +- return unless @group.feature_available?(:group_usage_billing) +- return unless @group.root? + +.form-group + %h5= s_('GroupSettingsUsageBilling|GitLab Credits dashboard') + = f.gitlab_ui_checkbox_component :display_gitlab_credits_user_data, s_('GroupSettingsUsageBilling|Display user data'), + help_text: s_('GroupSettingsUsageBilling|If selected, individual usernames and their credit usage are visible on the GitLab Credits dashboard. If your organization needs to restrict access to individual user activity for compliance or privacy reasons, clear this checkbox.'), + checkbox_options: { checked: @group.namespace_settings&.display_gitlab_credits_user_data } diff --git a/ee/spec/features/groups/group_settings_spec.rb b/ee/spec/features/groups/group_settings_spec.rb index b4ec1fc8f8039c6670d6dfd0eae5283236336add..0eec58873a715aa295fe5a7aa90da6894c63e35f 100644 --- a/ee/spec/features/groups/group_settings_spec.rb +++ b/ee/spec/features/groups/group_settings_spec.rb @@ -420,7 +420,7 @@ end end - context 'Dormant members', :saas, :aggregate_failures, feature_category: :user_management do + context 'Dormant members', :aggregate_failures, feature_category: :user_management do before do visit edit_group_path(group) end @@ -499,6 +499,88 @@ def service_access_token_expiration_enforced_selector end end + context 'for gitlab credits dashboard' do + context 'when in saas', :saas_gitlab_com_subscriptions do + it 'hides checkbox when usage_billing_dev is disabled' do + stub_feature_flags(usage_billing_dev: false) + stub_licensed_features(group_usage_billing: true) + + visit edit_group_path(group) + + within_testid('permissions-settings') do + expect(page).not_to have_content('GitLab Credits dashboard') + expect(page).not_to have_content('Display user data') + end + end + + it 'hides checkbox when group does not have usage billing feature' do + stub_feature_flags(usage_billing_dev: true) + stub_licensed_features(group_usage_billing: false) + + visit edit_group_path(group) + + within_testid('permissions-settings') do + expect(page).not_to have_content('GitLab Credits dashboard') + expect(page).not_to have_content('Display user data') + end + end + + it 'shows the checkbox when both feature flag and group feature are enabled' do + stub_feature_flags(usage_billing_dev: true) + stub_licensed_features(group_usage_billing: true) + + visit edit_group_path(group) + + within_testid('permissions-settings') do + expect(page).to have_content('GitLab Credits dashboard') + expect(page).to have_content('Display user data') + end + end + + it 'changes display user data', :js do + stub_feature_flags(usage_billing_dev: true) + stub_licensed_features(group_usage_billing: true) + + visit edit_group_path(group) + + expect(group.namespace_settings.display_gitlab_credits_user_data).to be_falsey + within_testid('permissions-settings') do + expect(page).to have_unchecked_field(_('Display user data')) + end + + within_testid('permissions-settings') do + check _('Display user data') + click_button _('Save changes') + end + + expect(page).to have_content( + format( + _("Group '%{group_name}' was successfully updated."), + group_name: group.name + ) + ) + + page.refresh + + expect(page).to have_checked_field(_('Display user data')) + end + end + + context 'when not in saas' do + it 'does not show the checkbox' do + stub_feature_flags(usage_billing_dev: true) + stub_licensed_features(group_usage_billing: true) + + visit edit_group_path(group) + + within_testid('permissions-settings') do + expect(page).not_to have_content('GitLab Credits dashboard') + expect(page).not_to have_content('Display user data') + end + end + end + end + context 'for disable personal access tokens setting' do before do stub_licensed_features(disable_personal_access_tokens: true) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index ea52711dad2bdeda48190684073558a6643bb545..128340b6106dab757c7fed92a05d88bed6c82795 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -33061,6 +33061,15 @@ msgstr "" msgid "GroupSelect|Select a group" msgstr "" +msgid "GroupSettingsUsageBilling|Display user data" +msgstr "" + +msgid "GroupSettingsUsageBilling|GitLab Credits dashboard" +msgstr "" + +msgid "GroupSettingsUsageBilling|If selected, individual usernames and their credit usage are visible on the GitLab Credits dashboard. If your organization needs to restrict access to individual user activity for compliance or privacy reasons, clear this checkbox." +msgstr "" + msgid "GroupSettings|Add additional webhook triggers for group access token expiration" msgstr ""