Module: ErpTechSvcs::Utils::CompassAccessNegotiator
- Included in:
- User
- Defined in:
- lib/erp_tech_svcs/utils/compass_access_negotiator.rb
Defined Under Namespace
Modules: Errors
Instance Method Summary collapse
-
#has_capability?(capability_type_iid, klass, instance_id = nil) ⇒ Boolean
pass in (capability_type_iid, class name) or (capability_type_iid, any class instance) Example: can user upload files? user.has_capability?(‘upload’, ‘FileAsset’) Example: can download this file? user.has_capability?(‘download’, file_asset).
-
#with_capability(capability_type_iid, klass_instance, &block) ⇒ Object
pass in (capability_type_iid, class name or any class instance, a block of code) Example: do something if user can download this file: user.with_capability(‘download’, file_asset) do something end.
Instance Method Details
#has_capability?(capability_type_iid, klass, instance_id = nil) ⇒ Boolean
pass in (capability_type_iid, class name) or (capability_type_iid, any class instance) Example: can user upload files? user.has_capability?(‘upload’, ‘FileAsset’) Example: can download this file? user.has_capability?(‘download’, file_asset)
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/erp_tech_svcs/utils/compass_access_negotiator.rb', line 8 def has_capability?(capability_type_iid, klass, instance_id = nil) capability_type_iid = capability_type_iid.to_s if capability_type_iid.is_a?(Symbol) if klass.is_a?(String) and instance_id.nil? scope_type = ScopeType.find_by_internal_identifier('class') capability = Capability.joins(:capability_type). where(:capability_resource_type => klass). where(:scope_type_id => scope_type.id). where(:capability_types => {:internal_identifier => capability_type_iid}).first return nil if capability.nil? # capability not found so return nil elsif klass.is_a?(String) scope_type = ScopeType.find_by_internal_identifier('instance') capability = Capability.joins(:capability_type). where(:capability_resource_type => klass). where(:capability_resource_id => instance_id). where(:scope_type_id => scope_type.id). where(:capability_types => {:internal_identifier => capability_type_iid}).first return !klass.constantize.protect_all_instances if capability.nil? else scope_type = ScopeType.find_by_internal_identifier('instance') capability = klass.capabilities.joins(:capability_type). where(:scope_type_id => scope_type.id). where(:capability_types => {:internal_identifier => capability_type_iid}).first # if capability not found, we see if all instances are protected # if all instance are protected, return false, otherwise true return !klass.protect_all_instances if capability.nil? end all_capabilities.include?(capability) end |
#with_capability(capability_type_iid, klass_instance, &block) ⇒ Object
pass in (capability_type_iid, class name or any class instance, a block of code) Example: do something if user can download this file: user.with_capability(‘download’, file_asset) do
something
end
43 44 45 46 47 48 49 |
# File 'lib/erp_tech_svcs/utils/compass_access_negotiator.rb', line 43 def with_capability(capability_type_iid, klass_instance, &block) if self.has_capability?(capability_type_iid, klass_instance) yield else raise ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability end end |