Commit d1816523 authored by huzaifaiftikhar1's avatar huzaifaiftikhar1

Update 'marked_for_deletion?' method to use global license check

Update 'delay_project_deletions' ability to rely only on global
license check
parent 38ec095b
...@@ -25,15 +25,13 @@ class Projects::ApplicationController < ApplicationController ...@@ -25,15 +25,13 @@ class Projects::ApplicationController < ApplicationController
path = File.join(params[:namespace_id], params[:project_id] || params[:id]) path = File.join(params[:namespace_id], params[:project_id] || params[:id])
auth_proc = if params[:controller] == "projects" && params[:action] == "restore"
->(project) { !project.pending_delete? }
else
->(project) { !project.pending_delete_or_hidden? }
end
@project = find_routable!(Project, path, request.fullpath, extra_authorization_proc: auth_proc) @project = find_routable!(Project, path, request.fullpath, extra_authorization_proc: auth_proc)
end end
def auth_proc
->(project) { !project.pending_delete? }
end
def build_canonical_path(project) def build_canonical_path(project)
params[:namespace_id] = project.namespace.to_param params[:namespace_id] = project.namespace.to_param
params[:project_id] = project.to_param params[:project_id] = project.to_param
...@@ -94,3 +92,5 @@ class Projects::ApplicationController < ApplicationController ...@@ -94,3 +92,5 @@ class Projects::ApplicationController < ApplicationController
return render_404 unless @project.feature_available?(:issues, current_user) return render_404 unless @project.feature_available?(:issues, current_user)
end end
end end
Projects::ApplicationController.prepend_mod_with('Projects::ApplicationController')
# frozen_string_literal: true
module EE
module Projects
module ApplicationController
extend ActiveSupport::Concern
extend ::Gitlab::Utils::Override
private
override :auth_proc
def auth_proc
if params[:controller] == "projects" && params[:action] == "restore"
super
else
->(project) { !project.pending_delete_or_hidden? }
end
end
end
end
end
...@@ -733,7 +733,7 @@ module EE ...@@ -733,7 +733,7 @@ module EE
def marked_for_deletion? def marked_for_deletion?
marked_for_deletion_at.present? && marked_for_deletion_at.present? &&
feature_available?(:adjourned_deletion_for_projects_and_groups) License.feature_available?(:adjourned_deletion_for_projects_and_groups)
end end
def ancestor_marked_for_deletion def ancestor_marked_for_deletion
......
...@@ -14,8 +14,11 @@ module EE ...@@ -14,8 +14,11 @@ module EE
end end
condition(:adjourned_project_deletion_available) do condition(:adjourned_project_deletion_available) do
License.feature_available?(:adjourned_deletion_for_projects_and_groups) && 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(:project_owners_list_project_pending_deletion) do
(::Feature.enabled?(:project_owners_list_project_pending_deletion, default_enabled: :yaml) || can?(:admin_all_resources))
end end
condition(:export_user_permissions_available) do condition(:export_user_permissions_available) do
...@@ -58,8 +61,11 @@ module EE ...@@ -58,8 +61,11 @@ module EE
prevent :create_group_with_default_branch_protection prevent :create_group_with_default_branch_protection
end end
rule { adjourned_project_deletion_available }.policy do rule { adjourned_project_deletion_available & project_owners_list_project_pending_deletion }.policy do
enable :list_removable_projects enable :list_removable_projects
end
rule { adjourned_project_deletion_available }.policy do
enable :delay_project_deletions enable :delay_project_deletions
end end
......
- if project.marked_for_deletion_at? && can?(current_user, :delay_project_deletions) - if project.marked_for_deletion?
= gl_badge_tag _('pending deletion'), variant: :warning = gl_badge_tag _('pending deletion'), variant: :warning
- elsif project.archived - elsif project.archived
= gl_badge_tag _('archived'), variant: :warning = gl_badge_tag _('archived'), variant: :warning
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
- issues_count = Projects::AllIssuesCountService.new(project).count - issues_count = Projects::AllIssuesCountService.new(project).count
- forks_count = Projects::ForksCountService.new(project).count - forks_count = Projects::ForksCountService.new(project).count
- unless project.marked_for_deletion_at? - unless project.marked_for_deletion?
.sub-section .sub-section
%h4.danger-title= _('Delete this project') %h4.danger-title= _('Delete this project')
- if adjourned_deletion && can_delay_project_deletions - if adjourned_deletion && can_delay_project_deletions
......
- if project.marked_for_deletion_at && can?(current_user, :delay_project_deletions) - if project.marked_for_deletion?
= gl_badge_tag _('pending deletion'), { variant: :warning }, { class: 'gl-display-flex gl-ml-3' } = gl_badge_tag _('pending deletion'), { variant: :warning }, { class: 'gl-display-flex gl-ml-3' }
- elsif project.archived - elsif project.archived
= gl_badge_tag _('archived'), { variant: :warning }, { class: 'gl-display-flex gl-ml-3' } = gl_badge_tag _('archived'), { variant: :warning }, { class: 'gl-display-flex gl-ml-3' }
...@@ -689,7 +689,7 @@ RSpec.describe ProjectsController do ...@@ -689,7 +689,7 @@ RSpec.describe ProjectsController do
it do it do
delete :destroy, params: { namespace_id: project.namespace, id: project } delete :destroy, params: { namespace_id: project.namespace, id: project }
expect(project.reload.marked_for_deletion?).to be_falsey expect(project.reload.marked_for_deletion?).to be_truthy
expect(project.reload.marked_for_deletion_at).to be_truthy expect(project.reload.marked_for_deletion_at).to be_truthy
expect(project.reload.hidden?).to be_truthy expect(project.reload.hidden?).to be_truthy
expect(response).to have_gitlab_http_status(:found) expect(response).to have_gitlab_http_status(:found)
...@@ -802,7 +802,6 @@ RSpec.describe ProjectsController do ...@@ -802,7 +802,6 @@ RSpec.describe ProjectsController do
let(:project) { create(:project, namespace: user.namespace) } let(:project) { create(:project, namespace: user.namespace) }
before do before do
controller.instance_variable_set(:@project, project)
sign_in(user) sign_in(user)
end end
......
...@@ -293,6 +293,24 @@ RSpec.describe GlobalPolicy do ...@@ -293,6 +293,24 @@ RSpec.describe GlobalPolicy do
end end
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 describe ':export_user_permissions', :enable_admin_mode do
using RSpec::Parameterized::TableSyntax 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