diff --git a/app/helpers/packages_helper.rb b/app/helpers/packages_helper.rb index 887f63ce05df54a610e898b9a24e4576f05b4fa8..595bb69709f7a5ca3bd8fd0d86b3fda7d25bdd45 100644 --- a/app/helpers/packages_helper.rb +++ b/app/helpers/packages_helper.rb @@ -97,11 +97,11 @@ def cleanup_settings_data } end - def settings_data + def settings_data(project) cleanup_settings_data.merge( - show_container_registry_settings: show_container_registry_settings(@project).to_s, - show_package_registry_settings: show_package_registry_settings(@project).to_s, - cleanup_settings_path: cleanup_image_tags_project_settings_packages_and_registries_path(@project) + show_container_registry_settings: show_container_registry_settings(project).to_s, + show_package_registry_settings: show_package_registry_settings(project).to_s, + cleanup_settings_path: cleanup_image_tags_project_settings_packages_and_registries_path(project) ) end end diff --git a/app/views/projects/settings/packages_and_registries/show.html.haml b/app/views/projects/settings/packages_and_registries/show.html.haml index 6f38a3ace92a44fa6990ba1e93dac856634fe836..d6c2228a6c2ebdcd3118925448b285771500972e 100644 --- a/app/views/projects/settings/packages_and_registries/show.html.haml +++ b/app/views/projects/settings/packages_and_registries/show.html.haml @@ -2,4 +2,4 @@ - page_title _('Packages and registries settings') - @force_desktop_expanded_sidebar = true -#js-registry-settings{ data: settings_data } +#js-registry-settings{ data: settings_data(@project) } diff --git a/ee/app/helpers/ee/packages_helper.rb b/ee/app/helpers/ee/packages_helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..c02539903de9efca8b53fa8ecfdc5684691404ae --- /dev/null +++ b/ee/app/helpers/ee/packages_helper.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module EE + module PackagesHelper + extend ::Gitlab::Utils::Override + + override :settings_data + def settings_data(project) + super.merge( + show_dependency_proxy_settings: show_dependency_proxy_settings?(project).to_s + ) + end + + private + + def show_dependency_proxy_settings?(project) + ::Feature.enabled?(:packages_dependency_proxy_maven, project) && + Ability.allowed?(current_user, :admin_dependency_proxy_packages_settings, + project.dependency_proxy_packages_setting) + end + end +end diff --git a/ee/spec/helpers/ee/packages_helper_spec.rb b/ee/spec/helpers/ee/packages_helper_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..5c627838652c16b446b1737f814d5decb8bf1c55 --- /dev/null +++ b/ee/spec/helpers/ee/packages_helper_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe EE::PackagesHelper, feature_category: :package_registry do + let_it_be(:project) { build_stubbed(:project) } + let_it_be(:user) { project.creator } + + describe '#settings_data' do + before do + allow(helper).to receive(:current_user).and_return(user) + instance_variable_set(:@project, project) + allow(Ability).to receive(:allowed?).and_call_original + end + + subject(:settings_data) { helper.settings_data(project) } + + context 'when the current user cannot admin dependency proxy packages settings' do + before do + allow(Ability).to receive(:allowed?).with(user, :admin_dependency_proxy_packages_settings, + project.dependency_proxy_packages_setting) + .and_return(false) + end + + it 'returns the settings data' do + expect(settings_data).to include( + show_dependency_proxy_settings: 'false' + ) + end + end + + context 'when the current user can admin dependency proxy packages settings' do + before do + allow(Ability).to receive(:allowed?).with(user, :admin_dependency_proxy_packages_settings, + project.dependency_proxy_packages_setting) + .and_return(true) + end + + it 'returns the settings data with show_dependency_proxy_settings set to true' do + expect(settings_data).to include( + show_dependency_proxy_settings: 'true' + ) + end + end + + context 'with feature flag disabled' do + before do + stub_feature_flags(packages_dependency_proxy_maven: false) + end + + context 'when the current user cannot admin dependency proxy packages settings' do + before do + allow(Ability).to receive(:allowed?).with(user, :admin_dependency_proxy_packages_settings, + project.dependency_proxy_packages_setting) + .and_return(false) + end + + it 'returns the settings data' do + expect(settings_data).to include( + show_dependency_proxy_settings: 'false' + ) + end + end + + context 'when the current user can admin dependency proxy packages settings' do + before do + allow(Ability).to receive(:allowed?).with(user, :admin_dependency_proxy_packages_settings, + project.dependency_proxy_packages_setting) + .and_return(true) + end + + it 'returns the settings data with show_dependency_proxy_settings set to true' do + expect(settings_data).to include( + show_dependency_proxy_settings: 'false' + ) + end + end + end + end +end