namespace :katello do
namespace :upgrades do namespace '4.1' do desc "Update for content import/export permissions." task :reupdate_content_import_export_perms => ['environment'] do User.current = User.anonymous_api_admin def deduplicate_filters(perm) # This method makes sure that the perms [import_content, export_content] # are not duplicated in this role # This case used to occur if this upgrade script did not run # and the user created a role with # import_library_content, export_library_content, import_content, export_content # After running this task the output used to be # [import_content, import_content, export_content, export_content] # This method just ensures that those get cleaned up. filtering_map = Filtering.where(permission_id: Permission.where(name: [perm])) .order(:id) .group_by(&:filter_id) .select { |_, value| value.length > 1 } filtering_map.values.each do |filterings| sliced = filterings[0...-1] # keep the last filtering and destroy the rest sliced.each(&:destroy) end end permission_map = { Permission.find_by(name: :export_library_content) => Permission.find_by(name: :export_content), Permission.find_by(name: :import_library_content) => Permission.find_by(name: :import_content), } permission_map.each do |old_perm, new_perm| Filtering.where(permission_id: old_perm.id).update_all(:permission_id => new_perm.id) if old_perm end names = permission_map.keys.compact.map(&:name) Permission.where(:name => names).destroy_all if names.any? deduplicate_filters('import_content') deduplicate_filters('export_content') export_content_views = Permission.find_by_name(:export_content_views) next if export_content_views.blank? Filtering.where(permission_id: export_content_views.id).each do |filtering| filter = filtering.filter filter.role.add_permissions!(:export_content) filter.destroy if filter.filterings.count == 1 end Filtering.where(permission_id: export_content_views.id).destroy_all export_content_views.destroy end end end
end