diff --git a/app/models/host/managed.rb b/app/models/host/managed.rb index 21cd3c7b6ea..a9dd8baffc7 100644 --- a/app/models/host/managed.rb +++ b/app/models/host/managed.rb @@ -14,6 +14,8 @@ class Host::Managed < Host::Base belongs_to :owner, :polymorphic => true belongs_to :compute_resource belongs_to :image + belongs_to :domain + belongs_to :subnet belongs_to :location belongs_to :organization diff --git a/app/validators/authorize_associations_validator.rb b/app/validators/authorize_associations_validator.rb index a2dadbb177b..99f11476972 100644 --- a/app/validators/authorize_associations_validator.rb +++ b/app/validators/authorize_associations_validator.rb @@ -22,7 +22,7 @@ def validate(record) record.class.reflect_on_all_associations.each do |association| - if check_authorization?(association, exemptions) + if check_authorization?(record, association, exemptions) permission = exemptions[association.name] || "view_#{association.klass.name.downcase.pluralize}" check_association(record, association, permission) @@ -30,7 +30,6 @@ def validate(record) end end end - rescue NameError => e end def check_association(record, association, permission) @@ -97,10 +96,11 @@ def organization?(association_name) association_name.to_s.singularize == 'organization' end - def check_authorization?(association, exemptions) + def check_authorization?(record, association, exemptions) + klass = association.options.include?(:polymorphic) ? record.send(association.foreign_type) : association.klass !exemptions[association.name] && - association.klass && - association.klass.respond_to?(:authorized) && + klass && + klass.respond_to?(:authorized) && association.name != 'taxonomies' end