Commit e7dedd68 authored by huzaifaiftikhar1's avatar huzaifaiftikhar1

Replace policy check with license check and minor refactor

* Use license check
License.feature_available?(:adjourned_deletion_for_projects_and_groups)
instead of policy check can?(current_user, :delay_project_deletions)
* Remove `index_projects_on_hidden` as it was not used
* Update documentation
parent d1816523
......@@ -2,17 +2,10 @@
class AddHiddenToProjects < Gitlab::Database::Migration[1.0]
DOWNTIME = false
INDEX_NAME = 'index_projects_on_hidden'
disable_ddl_transaction!
enable_lock_retries!
def up
def change
add_column :projects, :hidden, :boolean, default: false # rubocop: disable Migration/AddColumnsToWideTables
add_concurrent_index :projects, :hidden, name: INDEX_NAME
end
def down
remove_concurrent_index_by_name :projects, INDEX_NAME
remove_column :projects, :hidden
end
end
......@@ -27547,8 +27547,6 @@ CREATE INDEX index_projects_on_creator_id_import_type_and_created_at_partial ON
CREATE INDEX index_projects_on_description_trigram ON projects USING gin (description gin_trgm_ops);
CREATE INDEX index_projects_on_hidden ON projects USING btree (hidden);
CREATE INDEX index_projects_on_id_and_archived_and_pending_delete ON projects USING btree (id) WHERE ((archived = false) AND (pending_delete = false));
CREATE UNIQUE INDEX index_projects_on_id_partial_for_visibility ON projects USING btree (id) WHERE (visibility_level = ANY (ARRAY[10, 20]));
......@@ -88,7 +88,7 @@ Projects are permanently deleted after a seven-day delay.
If you are on:
- Premium tier and above, you can disable this by changing the [group setting](../group/index.md#enable-delayed-project-deletion).
- Free tier, groups have delayed project deletion enabled by default and you cannot disable this setting.
- Free tier, you cannot disable this setting or restore projects.
## Alternative SSH port
......
......@@ -38,7 +38,7 @@ module EE
override :destroy
def destroy
return super unless can?(current_user, :delay_project_deletions)
return super unless License.feature_available?(:adjourned_deletion_for_projects_and_groups)
return super unless project.adjourned_deletion_configured?
return super if project.marked_for_deletion_at? && params[:permanently_delete].present?
......
......@@ -14,11 +14,8 @@ module EE
end
condition(:adjourned_project_deletion_available) do
License.feature_available?(:adjourned_deletion_for_projects_and_groups)
end
condition(:project_owners_list_project_pending_deletion) do
(::Feature.enabled?(:project_owners_list_project_pending_deletion, default_enabled: :yaml) || can?(:admin_all_resources))
License.feature_available?(:adjourned_deletion_for_projects_and_groups) &&
(::Feature.enabled?(:project_owners_list_project_pending_deletion, default_enabled: :yaml) || can?(:admin_all_resources))
end
condition(:export_user_permissions_available) do
......@@ -61,12 +58,8 @@ module EE
prevent :create_group_with_default_branch_protection
end
rule { adjourned_project_deletion_available & project_owners_list_project_pending_deletion }.policy do
enable :list_removable_projects
end
rule { adjourned_project_deletion_available }.policy do
enable :delay_project_deletions
enable :list_removable_projects
end
rule { export_user_permissions_available & admin }.enable :export_user_permissions
......
......@@ -4,7 +4,7 @@ module Projects
class MarkForDeletionService < BaseService
def execute
return success if project.marked_for_deletion_at?
return error('Cannot mark project for deletion: feature not supported') unless can?(current_user, :delay_project_deletions)
return error('Cannot mark project for deletion: feature not supported') unless License.feature_available?(:adjourned_deletion_for_projects_and_groups)
result = ::Projects::UpdateService.new(
project,
......
- return unless can?(current_user, :remove_project, project)
- can_delay_project_deletions = can?(current_user, :delay_project_deletions)
- can_delay_project_deletions = License.feature_available?(:adjourned_deletion_for_projects_and_groups)
- adjourned_deletion = project.adjourned_deletion_configured?
- adjourned_date = adjourned_deletion ? permanent_deletion_date(Time.now.utc).to_s : nil
- restore_help_path = help_page_path('user/project/settings/index', anchor: 'restore-a-project')
......
- return unless can?(current_user, :delay_project_deletions)
- return unless License.feature_available?(:adjourned_deletion_for_projects_and_groups)
%p= marked_for_removal_message(@project)
......@@ -125,7 +125,7 @@ module EE
override :delete_project
def delete_project(user_project)
return super unless can?(current_user, :delay_project_deletions)
return super unless License.feature_available?(:adjourned_deletion_for_projects_and_groups)
return super unless user_project.adjourned_deletion_configured?
result = destroy_conditionally!(user_project) do
......
......@@ -293,24 +293,6 @@ RSpec.describe GlobalPolicy do
end
end
describe 'delay_project_deletions' do
before do
stub_licensed_features(adjourned_deletion_for_projects_and_groups: licensed?)
end
context 'when licensed feature is enabled' do
let(:licensed?) { true }
it { is_expected.to be_allowed(:delay_project_deletions) }
end
context 'when licensed feature is not enabled' do
let(:licensed?) { false }
it { is_expected.to be_disallowed(:delay_project_deletions) }
end
end
describe ':export_user_permissions', :enable_admin_mode do
using RSpec::Parameterized::TableSyntax
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment