Skip to content

Commit

Permalink
Merge pull request #649 from lpichler/disable_ownership_screen_for_pr…
Browse files Browse the repository at this point in the history
…ovider_with_tenant_mapping

Disable ownership screen for provider with tenant mapping
  • Loading branch information
martinpovolny authored Mar 16, 2017
2 parents 6306c86 + 8fdc812 commit 481b3a0
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 8 deletions.
29 changes: 25 additions & 4 deletions app/controllers/application_controller/ci_processing.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ def set_ownership
if @explorer
@sb[:explorer] = true
ownership(ownership_items)
if @ownershipitems.empty?
add_flash(_('None of the selected items allow ownership changes'), :error)

@refresh_div = "flash_msg_div"
@refresh_partial = "layouts/flash_msg"
return
end
else
if role_allows?(:feature => "vm_ownership")
drop_breadcrumb(:name => _("Set Ownership"), :url => "/vm_common/ownership")
Expand All @@ -53,6 +60,7 @@ def set_ownership
end
end
end

alias_method :image_ownership, :set_ownership
alias_method :instance_ownership, :set_ownership
alias_method :vm_ownership, :set_ownership
Expand All @@ -76,6 +84,7 @@ def ownership(ownership_items = [])
drop_breadcrumb(:name => _("Set Ownership"), :url => "/vm_common/ownership")
ownership_items = params[:rec_ids] if params[:rec_ids]
build_ownership_info(ownership_items)
return if @ownershipitems.empty?
build_targets_hash(@ownershipitems)
if @sb[:explorer]
@refresh_partial = "shared/views/ownership"
Expand All @@ -99,8 +108,10 @@ def build_ownership_info(ownership_items)
Rbac.filtered(MiqGroup.non_tenant_groups).each { |g| @groups[g.description] = g.id.to_s }

@user = @group = DONT_CHANGE_OWNER if ownership_items.length > 1

@ownershipitems = klass.find(ownership_items).sort_by(&:name)
ownership_scope = klass.where(:id => ownership_items)
ownership_scope = ownership_scope.with_ownership if klass.respond_to?(:with_ownership)
@origin_ownership_items = ownership_items
@ownershipitems = ownership_scope.order(:name)
@view = get_db_view(klass == VmOrTemplate ? Vm : klass) # Instantiate the MIQ Report view object
@view.table = MiqFilter.records2table(@ownershipitems, @view.cols + ['id'])
end
Expand All @@ -116,11 +127,18 @@ def build_ownership_hash(ownership_items)
@group = group ? group.id.to_s : nil
Rbac.filtered(MiqGroup).each { |g| @groups[g.description] = g.id.to_s }
@user = @group = DONT_CHANGE_OWNER if ownership_items.length > 1
@ownershipitems = klass.find(ownership_items).sort_by(&:name)
@ownershipitems = Rbac.filtered(klass.where(:id => ownership_items).order(:name), :class => klass)
raise _('Invalid items passed') unless @ownershipitems.pluck(:id).to_set == ownership_items.map(&:to_i).to_set
{:user => @user,
:group => @group}
end

def valid_items_for(klass, param_ids)
scope = klass.respond_to?(:with_ownership) ? klass.with_ownership : klass
checked_ids = Rbac.filtered(scope.where(:id => param_ids)).pluck(:id)
checked_ids.to_set == param_ids.to_set
end

def ownership_update
case params[:button]
when "cancel"
Expand Down Expand Up @@ -151,7 +169,10 @@ def ownership_update
end

klass = get_class_from_controller_param(request.parameters[:controller])
result = klass.set_ownership(params[:objectIds].map(&:to_i), opts)
param_ids = params[:objectIds].map(&:to_i)
raise _('Invalid items selected.') unless valid_items_for(klass, param_ids)

result = klass.set_ownership(param_ids, opts)
unless result == true
result["missing_ids"].each { |msg| add_flash(msg, :error) } if result["missing_ids"]
result["error_updating"].each { |msg| add_flash(msg, :error) } if result["error_updating"]
Expand Down
9 changes: 9 additions & 0 deletions app/helpers/application_helper/button/set_ownership.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class ApplicationHelper::Button::SetOwnership < ApplicationHelper::Button::Basic
needs :@record

def disabled?
@error_message = _('Ownership is controlled by tenant mapping') if
@record.ext_management_system.tenant_mapping_enabled?
@error_message.present?
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ class ApplicationHelper::Toolbar::OpenstackVmCloudCenter < ApplicationHelper::To
:instance_ownership,
'pficon pficon-user fa-lg',
N_('Set Ownership for this Instance'),
N_('Set Ownership')),
N_('Set Ownership'),
:klass => ApplicationHelper::Button::SetOwnership),
button(
:instance_delete,
'pficon pficon-delete fa-lg',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ class ApplicationHelper::Toolbar::XTemplateCloudCenter < ApplicationHelper::Tool
:image_ownership,
'pficon pficon-user fa-lg',
N_('Set Ownership for this Image'),
N_('Set Ownership')),
N_('Set Ownership'),
:klass => ApplicationHelper::Button::SetOwnership
),
button(
:image_delete,
'pficon pficon-delete fa-lg',
Expand Down
4 changes: 3 additions & 1 deletion app/helpers/application_helper/toolbar/x_vm_cloud_center.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ class ApplicationHelper::Toolbar::XVmCloudCenter < ApplicationHelper::Toolbar::B
:instance_ownership,
'pficon pficon-user fa-lg',
N_('Set Ownership for this Instance'),
N_('Set Ownership')),
N_('Set Ownership'),
:klass => ApplicationHelper::Button::SetOwnership
),
separator,
button(
:instance_delete,
Expand Down
3 changes: 3 additions & 0 deletions app/views/shared/views/_ownership.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@
%hr
%h3
= _('Affected Items')
- if @origin_ownership_items.count != @ownershipitems.count
%strong
= _('Note: Some items might be hidden due to the possibility of an ownership change')
- if @ownershipitems
- @embedded = true
- @quadicon_no_url = true
Expand Down
2 changes: 1 addition & 1 deletion spec/controllers/vm_cloud_controller/trees_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
%w(vm_amazon Amazon)
].each do |instance, name|
it "renders Instance details for #{name} node" do
instance = FactoryGirl.create(instance.to_sym)
instance = FactoryGirl.create(instance.to_sym, :with_provider)

session[:settings] = {}
seed_session_trees('vm_cloud', 'instances_tree')
Expand Down
25 changes: 25 additions & 0 deletions spec/helpers/application_helper/buttons/set_ownership_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
describe ApplicationHelper::Button::SetOwnership do
let(:view_context) { setup_view_context_with_sandbox({}) }

let(:ext_management_system) do
FactoryGirl.create(:ext_management_system, :tenant_mapping_enabled => tenant_mapping_enabled)
end

let(:record) { FactoryGirl.create(:vm, :ext_management_system => ext_management_system) }

let(:button) { described_class.new(view_context, {}, {'record' => record}, {}) }

describe '#calculate_properties' do
before { button.calculate_properties }

context 'when provider has tenant mapping enabled' do
let(:tenant_mapping_enabled) { true }
it_behaves_like 'a disabled button', 'Ownership is controlled by tenant mapping'
end

context 'when provider has tenant mapping disabled' do
let(:tenant_mapping_enabled) { false }
it_behaves_like 'an enabled button'
end
end
end

0 comments on commit 481b3a0

Please sign in to comment.