Module: ErpTechSvcs::Extensions::ActiveRecord::ProtectedByCapabilities::SingletonMethods

Defined in:
lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb

Instance Method Summary collapse

Instance Method Details

#add_capability(capability_type_iid) ⇒ Object

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?”



133
134
135
136
137
# 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_capabilitiesObject

class method to get all capabilities for this model



101
102
103
# File 'lib/erp_tech_svcs/extensions/active_record/protected_with_capabilities.rb', line 101

def all_capabilities
  capabilities
end

#capabilitiesObject

class method to get all capabilities for this model



96
97
98
# 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_rolesObject

return unique roles on capabilities for this model



126
127
128
# 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_capabilitiesObject

class method to get only class capabilities for this model



106
107
108
# 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) ⇒ Object



159
160
161
162
163
164
165
# 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) ⇒ Object



143
144
145
146
147
# 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_capabilitiesObject

class method to get only instance capabilities for this model



116
117
118
# 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) ⇒ Object



139
140
141
# 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_capabilitiesObject

class method to get only query capabilities for this model



111
112
113
# 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) ⇒ Object

remove a class level capability



150
151
152
153
# 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) ⇒ Object



120
121
122
123
# 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) ⇒ Object



155
156
157
# 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