Fixes #3402 - DataPrivacy Task fails in some situations.

This commit is contained in:
Rolf Schmidt 2021-03-02 11:03:21 +00:00 committed by Thorsten Eckel
parent a256d443ab
commit 050315bac9
2 changed files with 26 additions and 12 deletions

View file

@ -1177,22 +1177,33 @@ raise 'Minimum one user need to have admin permissions'
next if class_name.blank? next if class_name.blank?
next if references.blank? next if references.blank?
ref_class = class_name.constantize ref_class = class_name.constantize
ref_update_columns = []
references.each do |column, reference_found| references.each do |column, reference_found|
next if !reference_found next if !reference_found
if user_columns.include?(column) if user_columns.include?(column)
ref_class.where(column => id).find_in_batches(batch_size: 1000) do |batch_list| ref_update_columns << column
batch_list.each do |record|
record.update!(column => 1)
rescue => e
Rails.logger.error e
end
end
elsif ref_class.exists?(column => id) elsif ref_class.exists?(column => id)
raise "Failed deleting references! Check logic for #{class_name}->#{column}." raise "Failed deleting references! Check logic for #{class_name}->#{column}."
end end
end end
next if ref_update_columns.blank?
where_sql = ref_update_columns.map { |column| "#{column} = #{id}" }.join(' OR ')
ref_class.where(where_sql).find_in_batches(batch_size: 1000) do |batch_list|
batch_list.each do |record|
ref_update_columns.each do |column|
next if record[column] != id
record[column] = 1
end
record.save!
rescue => e
Rails.logger.error e
end
end
end end
true true

View file

@ -824,7 +824,7 @@ RSpec.describe User, type: :model do
refs_known = { 'Group' => { 'created_by_id' => 1, 'updated_by_id' => 0 }, refs_known = { 'Group' => { 'created_by_id' => 1, 'updated_by_id' => 0 },
'Token' => { 'user_id' => 1 }, 'Token' => { 'user_id' => 1 },
'Ticket::Article' => 'Ticket::Article' =>
{ 'created_by_id' => 0, 'updated_by_id' => 0, 'origin_by_id' => 1 }, { 'created_by_id' => 1, 'updated_by_id' => 1, 'origin_by_id' => 1 },
'Ticket::StateType' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Ticket::StateType' => { 'created_by_id' => 0, 'updated_by_id' => 0 },
'Ticket::Article::Sender' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Ticket::Article::Sender' => { 'created_by_id' => 0, 'updated_by_id' => 0 },
'Ticket::Article::Type' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Ticket::Article::Type' => { 'created_by_id' => 0, 'updated_by_id' => 0 },
@ -871,7 +871,7 @@ RSpec.describe User, type: :model do
'Macro' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Macro' => { 'created_by_id' => 0, 'updated_by_id' => 0 },
'Channel' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Channel' => { 'created_by_id' => 0, 'updated_by_id' => 0 },
'Role' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Role' => { 'created_by_id' => 0, 'updated_by_id' => 0 },
'History' => { 'created_by_id' => 1 }, 'History' => { 'created_by_id' => 2 },
'Webhook' => { 'created_by_id' => 0, 'updated_by_id' => 0 }, 'Webhook' => { 'created_by_id' => 0, 'updated_by_id' => 0 },
'Overview' => { 'created_by_id' => 1, 'updated_by_id' => 0 }, 'Overview' => { 'created_by_id' => 1, 'updated_by_id' => 0 },
'ActivityStream' => { 'created_by_id' => 0 }, 'ActivityStream' => { 'created_by_id' => 0 },
@ -906,7 +906,7 @@ RSpec.describe User, type: :model do
group = create(:group, created_by_id: user.id) group = create(:group, created_by_id: user.id)
job = create(:job, updated_by_id: user.id) job = create(:job, updated_by_id: user.id)
ticket = create(:ticket, group: group_subject, owner: user) ticket = create(:ticket, group: group_subject, owner: user)
ticket_article = create(:ticket_article, ticket: ticket, origin_by_id: user.id) ticket_article = create(:ticket_article, ticket: ticket, created_by_id: user.id, updated_by_id: user.id, origin_by_id: user.id)
customer_ticket1 = create(:ticket, group: group_subject, customer: user) customer_ticket1 = create(:ticket, group: group_subject, customer: user)
customer_ticket2 = create(:ticket, group: group_subject, customer: user) customer_ticket2 = create(:ticket, group: group_subject, customer: user)
customer_ticket3 = create(:ticket, group: group_subject, customer: user) customer_ticket3 = create(:ticket, group: group_subject, customer: user)
@ -936,7 +936,10 @@ RSpec.describe User, type: :model do
expect { group.reload }.to change(group, :created_by_id).to(1) expect { group.reload }.to change(group, :created_by_id).to(1)
expect { job.reload }.to change(job, :updated_by_id).to(1) expect { job.reload }.to change(job, :updated_by_id).to(1)
expect { ticket.reload }.to change(ticket, :owner_id).to(1) expect { ticket.reload }.to change(ticket, :owner_id).to(1)
expect { ticket_article.reload }.to change(ticket_article, :origin_by_id).to(1) expect { ticket_article.reload }
.to change(ticket_article, :origin_by_id).to(1)
.and change(ticket_article, :updated_by_id).to(1)
.and change(ticket_article, :created_by_id).to(1)
expect { knowledge_base_answer.reload } expect { knowledge_base_answer.reload }
.to change(knowledge_base_answer, :archived_by_id).to(1) .to change(knowledge_base_answer, :archived_by_id).to(1)
.and change(knowledge_base_answer, :published_by_id).to(1) .and change(knowledge_base_answer, :published_by_id).to(1)