-
Notifications
You must be signed in to change notification settings - Fork 896
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #12369 from mkanoor/rbac_tres
RBAC support for Automate Service Models
- Loading branch information
Showing
9 changed files
with
201 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
47 changes: 47 additions & 0 deletions
47
lib/miq_automation_engine/engine/miq_ae_service/miq_ae_service_rbac.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
module MiqAeMethodService | ||
module MiqAeServiceRbac | ||
extend ActiveSupport::Concern | ||
|
||
module ClassMethods | ||
def find_ar_object_by_id(id) | ||
if rbac_enabled? | ||
Rbac.filtered(model.where(:id => id), :user => workspace.ae_user).first | ||
else | ||
model.find(*id) | ||
end | ||
end | ||
|
||
def all | ||
objs = rbac_enabled? ? Rbac.filtered(model, :user => workspace.ae_user) : model.all | ||
wrap_results(objs) | ||
end | ||
|
||
def count | ||
rbac_enabled? ? Rbac.filtered(model, :user => workspace.ae_user).count : model.count | ||
end | ||
|
||
def first | ||
objs = rbac_enabled? ? Rbac.filtered(model, :user => workspace.ae_user, :limit => 1) : model | ||
wrap_results(objs.first) | ||
end | ||
|
||
def filter_objects(objs) | ||
if objs.nil? | ||
objs | ||
elsif objs.kind_of?(Array) || objs.kind_of?(ActiveRecord::Relation) | ||
rbac_enabled? ? Rbac.filtered(objs, :user => workspace.ae_user) : objs | ||
else | ||
rbac_enabled? ? Rbac.filtered_object(objs, :user => workspace.ae_user) : objs | ||
end | ||
end | ||
|
||
def workspace | ||
MiqAeEngine::MiqAeWorkspaceRuntime.current || MiqAeEngine::DrbRemoteInvoker.workspace | ||
end | ||
|
||
def rbac_enabled? | ||
workspace && workspace.rbac_enabled? | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,6 +15,9 @@ | |
|
||
def persist_state_hash | ||
end | ||
|
||
def disable_rbac | ||
end | ||
end.new | ||
|
||
logger_klass = Class.new do | ||
|
87 changes: 87 additions & 0 deletions
87
spec/lib/miq_automation_engine/engine/miq_ae_service/miq_ae_service_rbac_spec.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
module MiqAeServiceModelSpec | ||
include MiqAeEngine | ||
describe MiqAeMethodService::MiqAeServiceVmOrTemplate do | ||
include Spec::Support::AutomationHelper | ||
before do | ||
vm11 | ||
vm21 | ||
user1 | ||
user2 | ||
end | ||
|
||
let(:options) { {} } | ||
|
||
let(:default_tenant) { Tenant.seed } | ||
|
||
let(:tenant1) { FactoryGirl.create(:tenant) } | ||
let(:group1) { FactoryGirl.create(:miq_group, :tenant => tenant1) } | ||
let(:ems1) { FactoryGirl.create(:ext_management_system, :tenant => tenant1) } | ||
let(:host1) { FactoryGirl.create(:host) } | ||
let(:user1) { FactoryGirl.create(:user, :miq_groups => [group1], :settings => {:display => {:timezone => "UTC"}}) } | ||
let(:vm11) { FactoryGirl.create(:vm_vmware, :tenant => tenant1, :host => host1, :miq_group => group1) } | ||
let(:vm12) { FactoryGirl.create(:vm_vmware, :tenant => tenant1, :host => host1, :miq_group => group1) } | ||
let(:vm13) { FactoryGirl.create(:vm_vmware, :tenant => tenant1, :host => host1, :miq_group => group1) } | ||
|
||
let(:tenant2) { FactoryGirl.create(:tenant) } | ||
let(:group2) { FactoryGirl.create(:miq_group, :tenant => tenant2) } | ||
let(:user2) { FactoryGirl.create(:user, :miq_groups => [group2], :settings => {:display => {:timezone => "UTC"}}) } | ||
let(:ems2) { FactoryGirl.create(:ext_management_system, :tenant => tenant2) } | ||
let(:host2) { FactoryGirl.create(:host) } | ||
let(:vm21) { FactoryGirl.create(:vm_vmware, :tenant => tenant2, :host => host2, :miq_group => group2) } | ||
let(:vm22) { FactoryGirl.create(:vm_vmware, :tenant => tenant2, :host => host2, :miq_group => group2) } | ||
let(:vm23) { FactoryGirl.create(:vm_vmware, :tenant => tenant2, :host => host2, :miq_group => group2) } | ||
|
||
context "automate methods - enable rbac" do | ||
def collect_ids_with_rbac | ||
<<-'RUBY' | ||
$evm.enable_rbac | ||
$evm.root['vm_ids'] = $evm.vmdb('vm').all.collect(&:id) | ||
RUBY | ||
end | ||
|
||
it 'filter all vms for a user via method with rbac' do | ||
vm12 | ||
vm13 | ||
vm22 | ||
create_ae_model_with_method(:name => 'FLINTSTONE', :ae_namespace => 'FRED', | ||
:ae_class => 'WILMA', :instance_name => 'DOGMATIX', | ||
:method_name => 'OBELIX', | ||
:method_script => collect_ids_with_rbac) | ||
ws = MiqAeEngine.instantiate("/FRED/WILMA/DOGMATIX", user2) | ||
ids = [vm21.id, vm22.id] | ||
expect(ws.root("vm_ids")).to match_array(ids) | ||
end | ||
|
||
after do | ||
MiqAeEngine::MiqAeWorkspaceRuntime.current = nil | ||
end | ||
end | ||
|
||
context "disable rbac - automate method" do | ||
def collect_ids_without_rbac | ||
<<-'RUBY' | ||
# RBAC is disabled by default | ||
# $evm.disable_rbac | ||
$evm.root['vm_ids'] = $evm.vmdb('vm').all.collect(&:id) | ||
RUBY | ||
end | ||
|
||
it 'filter all vms for a user via method without rbac' do | ||
vm12 | ||
vm13 | ||
vm22 | ||
create_ae_model_with_method(:name => 'FLINTSTONE', :ae_namespace => 'FRED', | ||
:ae_class => 'WILMA', :instance_name => 'DOGMATIX', | ||
:method_name => 'OBELIX', | ||
:method_script => collect_ids_without_rbac) | ||
ws = MiqAeEngine.instantiate("/FRED/WILMA/DOGMATIX", user2) | ||
ids = [vm11.id, vm21.id, vm22.id, vm12.id, vm13.id] | ||
expect(ws.root("vm_ids")).to match_array(ids) | ||
end | ||
|
||
after do | ||
MiqAeEngine::MiqAeWorkspaceRuntime.current = nil | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters