Skip to content

Commit

Permalink
Merge pull request #4062 from h-kataria/separate_feature_for_requests…
Browse files Browse the repository at this point in the history
…_subtabs

Added separate features for Requests subtabs
  • Loading branch information
martinpovolny committed Jun 18, 2018
2 parents d976352 + 0cff391 commit b254764
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 27 deletions.
8 changes: 6 additions & 2 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1159,7 +1159,7 @@ def rbac_free_for_custom_button?(task, button_id)
def check_button_rbac
# buttons ids that share a common feature id
common_buttons = %w(rbac_project_add rbac_tenant_add)
task = common_buttons.include?(params[:pressed]) ? rbac_common_feature_for_buttons(params[:pressed]) : params[:pressed]
task = common_buttons.include?(params[:pressed]) ? rbac_common_feature_for_buttons(params[:pressed]) : rbac_feature_id(params[:pressed])
# Intentional single = so we can check auth later
rbac_free_for_custom_button?(task, params[:button_id]) || role_allows?(:feature => task)
end
Expand All @@ -1173,8 +1173,12 @@ def handle_button_rbac
pass
end

def rbac_feature_id(feature_id)
feature_id
end

def check_generic_rbac
ident = "#{controller_name}_#{action_name == 'report_data' ? 'show_list' : action_name}"
ident = rbac_feature_id("#{controller_name}_#{action_name == 'report_data' ? 'show_list' : action_name}")
if MiqProductFeature.feature_exists?(ident)
role_allows?(:feature => ident, :any => true)
else
Expand Down
17 changes: 11 additions & 6 deletions app/controllers/miq_request_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def button
end

def request_edit
assert_privileges("miq_request_edit")
assert_privileges(rbac_feature_id("miq_request_edit"))
provision_request = MiqRequest.find(params[:id])
if provision_request.workflow_class || provision_request.kind_of?(MiqProvisionConfiguredSystemRequest)
request_edit_settings(provision_request)
Expand All @@ -44,7 +44,7 @@ def request_edit
end

def request_copy
assert_privileges("miq_request_copy")
assert_privileges(rbac_feature_id("miq_request_copy"))
provision_request = MiqRequest.find(params[:id])
@refresh_partial = "prov_copy"
request_settings_for_edit_or_copy(provision_request)
Expand Down Expand Up @@ -105,7 +105,7 @@ def show

# Stamp a request with approval or denial
def stamp
assert_privileges("miq_request_approval")
assert_privileges(rbac_feature_id("miq_request_approval"))
if params[:button] == "cancel"
if (session[:edit] && session[:edit][:stamp_typ]) == "a"
flash_to_session(_("Request approval was cancelled by the user"))
Expand Down Expand Up @@ -264,7 +264,7 @@ def filter_choice_not_all(key)
end

def filter
assert_privileges("miq_request_show_list")
assert_privileges(rbac_feature_id("miq_request_show_list"))
scope = prov_scope(
:reason_text => params[:reasonText],
:time_period => params[:selectedPeriod],
Expand Down Expand Up @@ -453,12 +453,17 @@ def identify_request

def is_approver
# TODO: this should be current_user
User.current_user.role_allows?(:identifier => 'miq_request_approval')
User.current_user.role_allows?(:identifier => rbac_feature_id('miq_request_approval'))
end

def rbac_feature_id(feature_id)
return feature_id unless %w(ae host).include?(session[:request_tab])
"#{session[:request_tab]}_#{feature_id}"
end

# Delete all selected or single displayed action(s)
def deleterequests
assert_privileges("miq_request_delete")
assert_privileges(rbac_feature_id("miq_request_delete"))

miq_requests = find_records_with_rbac(MiqRequest, checked_or_params)
if miq_requests.empty?
Expand Down
1 change: 1 addition & 0 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,7 @@ def _toolbar_builder
:record => @record,
:report => @report,
:report_result_id => @report_result_id,
:request_tab => @request_tab,
:resolve => @resolve,
:sb => @sb,
:selected_zone => @selected_zone,
Expand Down
15 changes: 13 additions & 2 deletions app/helpers/application_helper/button/miq_request.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
class ApplicationHelper::Button::MiqRequest < ApplicationHelper::Button::GenericFeatureButton
needs :@record
needs :@record, :@request_tab

def role_allows_feature?
prefix = case @request_tab
when 'ae', 'host'
"#{@request_tab}_"
else
""
end
# check RBAC on separate button
role_allows?(:feature => "#{prefix}#{@feature}")
end

def visible?
return false if @record.resource_type == "AutomationRequest" &&
!%w(miq_request_approve miq_request_deny miq_request_delete).include?(@feature)
!%w(miq_request_approval miq_request_deny miq_request_delete).include?(@feature)
true
end
end
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
class ApplicationHelper::Button::MiqRequestApproval < ApplicationHelper::Button::MiqRequest
needs :@showtype, :@record

def role_allows_feature?
role_allows?(:feature => "miq_request_approval")
end
needs :@showtype, :@record, :@request_tab

def visible?
return false unless super
Expand Down
4 changes: 2 additions & 2 deletions app/helpers/application_helper/button/miq_request_delete.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class ApplicationHelper::Button::MiqRequestDelete < ApplicationHelper::Button::Basic
needs :@record
class ApplicationHelper::Button::MiqRequestDelete < ApplicationHelper::Button::MiqRequest
needs :@record, :@request_tab
delegate :current_user, :to => :@view_context

def disabled?
Expand Down
9 changes: 6 additions & 3 deletions app/helpers/application_helper/toolbar/miq_request_center.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,16 @@ class ApplicationHelper::Toolbar::MiqRequestCenter < ApplicationHelper::Toolbar:
nil,
:url_parms => "&refresh=y",
:confirm => N_("Are you sure you want to delete this Request?"),
:klass => ApplicationHelper::Button::MiqRequestDelete),
:klass => ApplicationHelper::Button::MiqRequestDelete,
:options => {:feature => 'miq_request_delete'}),
button(
:miq_request_reload,
'fa fa-refresh fa-lg',
N_('Refresh this page'),
N_('Refresh'),
:url_parms => "&display=miq_provisions"),
:url_parms => "&display=miq_provisions",
:klass => ApplicationHelper::Button::MiqRequest,
:options => {:feature => 'miq_request_reload'}),
])
button_group('miq_request_approve', [
button(
Expand All @@ -36,7 +39,7 @@ class ApplicationHelper::Toolbar::MiqRequestCenter < ApplicationHelper::Toolbar:
N_('Approve this Request'),
nil,
:klass => ApplicationHelper::Button::MiqRequestApproval,
:options => {:feature => 'miq_request_approve'},
:options => {:feature => 'miq_request_approval'},
:url => "/stamp",
:url_parms => "?typ=a"),
button(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ class ApplicationHelper::Toolbar::MiqRequestsCenter < ApplicationHelper::Toolbar
N_('Refresh this page'),
N_('Refresh'),
:url_parms => "main_div",
:send_checked => true),
:send_checked => true,
:klass => ApplicationHelper::Button::MiqRequest,
:options => {:feature => 'miq_request_reload'}),
])
end
4 changes: 2 additions & 2 deletions app/presenters/menu/default_menu.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def infrastructure_menu_section
Menu::Item.new('storage', N_('Datastores'), 'storage', {:feature => 'storage_show_list'}, '/storage/explorer'),
Menu::Item.new('pxe', N_('PXE'), 'pxe', {:feature => 'pxe', :any => true}, '/pxe/explorer'),
Menu::Item.new('switch', N_('Networking'), 'infra_networking', {:feature => 'infra_networking', :any => true}, '/infra_networking/explorer'),
Menu::Item.new('miq_request_host', N_('Requests'), nil, {:feature => 'miq_request_show_list'}, '/miq_request?typ=host'),
Menu::Item.new('miq_request_host', N_('Requests'), 'host_miq_request', {:feature => 'host_miq_request_show_list'}, '/miq_request?typ=host'),
Menu::Item.new('infra_topology', N_('Topology'), 'infra_topology', {:feature => 'infra_topology', :any => true}, '/infra_topology')
])
end
Expand Down Expand Up @@ -233,7 +233,7 @@ def automate_menu_section
Menu::Item.new('generic_object_definitions', N_('Generic Objects'), 'generic_object_definitions', {:feature => 'generic_object_definition'}, '/generic_object_definition'),
Menu::Item.new('miq_ae_export', N_('Import / Export'), 'miq_ae_class_import_export', {:feature => 'miq_ae_class_import_export'}, '/miq_ae_tools/import_export'),
Menu::Item.new('miq_ae_logs', N_('Log'), 'miq_ae_class_log', {:feature => 'miq_ae_class_log'}, '/miq_ae_tools/log'),
Menu::Item.new('miq_request_ae', N_('Requests'), nil, {:feature => 'miq_request_show_list'}, "/miq_request?typ=ae")
Menu::Item.new('miq_request_ae', N_('Requests'), 'ae_miq_request', {:feature => 'ae_miq_request_show_list'}, '/miq_request?typ=ae')
].compact)
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
described_class.new(
view_context,
{},
{'record' => @record, 'showtype' => @showtype},
{:options => {:feature => 'miq_request_approve'}}
{'record' => @record, 'showtype' => @showtype, 'request_tab' => @request_tab},
{:options => {:feature => 'miq_request_approval'}}
)
end

Expand All @@ -16,7 +16,7 @@
let(:state) { "xx" }
%w(MiqProvisionRequest MiqHostProvisionRequest VmReconfigureRequest VmCloudReconfigureRequest
VmMigrateRequest AutomationRequest ServiceTemplateProvisionRequest).each do |cls|
context "id = miq_request_approve" do
context "id = miq_request_approval" do
before do
@record = cls.constantize.new
allow(@record).to receive_messages(:resource_type => request,
Expand All @@ -25,6 +25,7 @@
allow(button).to receive(:role_allows_feature?).and_return(true)
allow(button).to receive(:current_user).and_return(user)
button.instance_variable_set(:@showtype, "prase")
button.instance_variable_set(:@request_tab, "service")
end
context "resource_type = AutomationRequest" do
let(:request) { "AutomationRequest" }
Expand Down Expand Up @@ -65,6 +66,7 @@
allow(button).to receive(:role_allows_feature?).and_return(true)
allow(button).to receive(:current_user).and_return(user)
button.instance_variable_set(:@showtype, "prase")
button.instance_variable_set(:@request_tab, "service")
end
context "resource_type = AutomationRequest" do
let(:request) { "AutomationRequest" }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
describe ApplicationHelper::Button::MiqRequestDelete do
let(:view_context) { setup_view_context_with_sandbox({}) }
let(:record) { FactoryGirl.create(:vm) }
let(:button) { described_class.new(view_context, {}, {'record' => record}, {}) }
let(:button) { described_class.new(view_context, {}, {'record' => record}, {:options => {:feature => 'miq_request_delete'}}) }

describe '#disabled?' do
subject { button[:title] }
Expand Down

0 comments on commit b254764

Please sign in to comment.