module ErpTechSvcs::Extensions::ActiveRecord::ProtectedByCapabilities::SingletonMethods

Public Instance Methods

add_capability(capability_type_iid) click to toggle source

add a class level capability (capability_resource_id will be NULL) the purpose of this is primarily for actions like create where the record does not exist yet this will allow us to assign the create capability to a User or Role so that we can ask the question “can a user create a record for this model?”

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 133
def add_capability(capability_type_iid)
  capability_type = convert_capability_type(capability_type_iid)
  scope_type = ScopeType.find_by_internal_identifier('class')
  Capability.find_or_create_by_capability_resource_type_and_capability_type_id_and_scope_type_id(get_superclass(self.name), capability_type.id, scope_type.id)
end
all_capabilities() click to toggle source

class method to get all capabilities for this model

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 101
def all_capabilities
  capabilities
end
capabilities() click to toggle source

class method to get all capabilities for this model

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 96
def capabilities
  Capability.where('capability_resource_type = ?', get_superclass(self.name))
end
capability_roles() click to toggle source

return unique roles on capabilities for this model

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 126
def capability_roles
  SecurityRole.joins(:capability_accessors => :capability).where(:capability_accessors => {:capabilities => {:capability_resource_type => get_superclass(self.name) }}).all.uniq
end
class_capabilities() click to toggle source

class method to get only class capabilities for this model

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 106
def class_capabilities
  scope_capabilities('class')
end
convert_capability_type(type) click to toggle source
# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 159
def convert_capability_type(type)
  return type if type.is_a?(CapabilityType)
  return nil unless (type.is_a?(String) || type.is_a?(Symbol))
  ct = CapabilityType.find_by_internal_identifier(type.to_s)
  return ct unless ct.nil?
  CapabilityType.create(:internal_identifier => type.to_s, :description => type.to_s.titleize)
end
get_capability(capability_type_iid) click to toggle source
# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 143
def get_capability(capability_type_iid)
  capability_type = convert_capability_type(capability_type_iid)
  scope_type = ScopeType.find_by_internal_identifier('class')
  capabilities.where(:capability_resource_type => get_superclass(self.name), :capability_type_id => capability_type.id, :scope_type_id => scope_type.id).first
end
instance_capabilities() click to toggle source

class method to get only instance capabilities for this model

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 116
def instance_capabilities
  scope_capabilities('instance')
end
protect_with_capability(capability_type_iid) click to toggle source
# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 139
def protect_with_capability(capability_type_iid)
  add_capability(capability_type_iid)
end
query_capabilities() click to toggle source

class method to get only query capabilities for this model

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 111
def query_capabilities
  scope_capabilities('query')
end
remove_capability(capability_type_iid) click to toggle source

remove a class level capability

# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 150
def remove_capability(capability_type_iid)
  capability = get_capability(capability_type_iid)
  capability.destroy unless capability.nil?
end
scope_capabilities(scope_type_iid) click to toggle source
# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 120
def scope_capabilities(scope_type_iid)
  scope_type = ScopeType.find_by_internal_identifier(scope_type_iid)
  capabilities.where(:scope_type_id => scope_type.id)
end
unprotect_with_capability(capability_type_iid) click to toggle source
# File lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb, line 155
def unprotect_with_capability(capability_type_iid)
  remove_capability(capability_type_iid)
end