src/app/decorators/models/alberich/permission_decorator.rb
#
# Copyright 2013 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
Alberich::Permission.class_eval do
class << self
include CommonFilterMethods
end
# type-specific associations to allow filter includes
belongs_to :pool_family, :class_name => "PoolFamily",
:foreign_key => "permission_object_id"
belongs_to :pool, :class_name => "Pool",
:foreign_key => "permission_object_id"
belongs_to :instance, :class_name => "Instance",
:foreign_key => "permission_object_id"
belongs_to :deployment, :class_name => "Deployment",
:foreign_key => "permission_object_id"
belongs_to :deployable, :class_name => "Deployable",
:foreign_key => "permission_object_id"
belongs_to :catalog, :class_name => "Catalog",
:foreign_key => "permission_object_id"
belongs_to :provider, :class_name => "Provider",
:foreign_key => "permission_object_id"
belongs_to :provider_account, :class_name => "ProviderAccount",
:foreign_key => "permission_object_id"
belongs_to :hardware_profile, :class_name => "hardwareProfile",
:foreign_key => "permission_object_id"
belongs_to :base_permission_object, :class_name => "Alberich::BasePermissionObject",
:foreign_key => "permission_object_id"
# :query is handled differently for permission
PRESET_FILTERS_OPTIONS = [
{:title => "permissions.preset_filters.user_permissions",
:id => "user_permissions",
:includes => :entity,
:where => {"alberich_entities.entity_target_type" => "User"}},
{:title => "permissions.preset_filters.group_permissions",
:id => "group_permissions",
:includes => :entity,
:where => {"alberich_entities.entity_target_type" => "UserGroup"}}
]
PROFILE_PRESET_FILTERS_OPTIONS = [
{:title => "permissions.global",
:id => "base_permission_object_permissions",
:includes => [:entity, :base_permission_object],
:where => {"permission_object_type" => "Alberich::BasePermissionObject"}},
{:title => "activerecord.models.provider",
:id => "provider_permissions",
:includes => [:entity, :provider],
:where => {"permission_object_type" => "Provider"},
:search_fields => ["providers.name"]},
{:title => "activerecord.models.provider_account",
:id => "provider_account_permissions",
:includes => [:entity, {:provider_account => :provider}],
:where => {"permission_object_type" => "ProviderAccount"},
:search_fields => ["provider_accounts.label", "providers.name"]},
{:title => "activerecord.models.pool",
:id => "pool_permissions",
:includes => [:entity, :pool],
:where => {"permission_object_type" => "Pool"},
:search_fields => ["pools.name"]},
{:title => "activerecord.models.pool_family",
:id => "pool_family_permissions",
:includes => [:entity, :pool_family],
:where => {"permission_object_type" => "PoolFamily"},
:search_fields => ["pool_families.name"]},
{:title => "activerecord.models.catalog",
:id => "catalog_permissions",
:includes => [:entity, :catalog],
:where => {"permission_object_type" => "Catalog"},
:search_fields => ["catalogs.name"]},
{:title => "activerecord.models.deployable",
:id => "deployable_permissions",
:includes => [:entity, :deployable],
:where => {"permission_object_type" => "Deployable"},
:search_fields => ["deployables.name"]},
{:title => "activerecord.models.deployment",
:id => "deployment_permissions",
:includes => [:entity, :deployment],
:where => {"permission_object_type" => "Deployment"},
:search_fields => ["deployments.name"]},
{:title => "activerecord.models.instance",
:id => "instance_permissions",
:includes => [:entity, :instance],
:where => {"permission_object_type" => "Instance"},
:search_fields => ["instances.name"]}
]
def self.apply_search_filter(search)
search, preset_filter_id = search
if search
if preset_filter_id
search_fields = PROFILE_PRESET_FILTERS_OPTIONS.select { |item|
item[:id] == preset_filter_id
}.first[:search_fields]
search_fields = [] if search_fields.nil?
else
search_fields = []
end
where_str = "lower(alberich_entities.name) LIKE :search OR lower(alberich_roles.name) LIKE :search"
search_fields.each do |search_field|
where_str += " OR lower(#{search_field}) LIKE :search"
end
includes([:entity, :role]).where(where_str, :search => "%#{search.downcase}%")
else
scoped
end
end
end