Class: AccessPolicy::PolicyEnforcer

Inherits:
Object
  • Object
show all
Defined in:
lib/access_policy/policy_enforcer.rb

Defined Under Namespace

Classes: NotAuthorizedError, NotDefinedError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(current_user_or_role, object_or_class, query = nil, default_error_policy = ->(*) { raise }) ⇒ PolicyEnforcer

Returns a new instance of PolicyEnforcer.

Raises:



10
11
12
13
14
15
16
17
18
# File 'lib/access_policy/policy_enforcer.rb', line 10

def initialize(current_user_or_role, object_or_class, query=nil, default_error_policy=->(*) { raise })
  raise NotDefinedError, 'unable to find policy class for anonymous classes' if class_to_guard(object_or_class).name.nil? || class_to_guard(object_or_class).name.length < 1

  self.current_user_or_role = current_user_or_role
  self.object_or_class = object_or_class
  self.query = query
  self.default_error_policy = default_error_policy

end

Instance Attribute Details

#current_user_or_roleObject

Returns the value of attribute current_user_or_role.



8
9
10
# File 'lib/access_policy/policy_enforcer.rb', line 8

def current_user_or_role
  @current_user_or_role
end

#default_error_policyObject

Returns the value of attribute default_error_policy.



8
9
10
# File 'lib/access_policy/policy_enforcer.rb', line 8

def default_error_policy
  @default_error_policy
end

#object_or_classObject

Returns the value of attribute object_or_class.



8
9
10
# File 'lib/access_policy/policy_enforcer.rb', line 8

def object_or_class
  @object_or_class
end

#queryObject

Returns the value of attribute query.



8
9
10
# File 'lib/access_policy/policy_enforcer.rb', line 8

def query
  @query
end

Instance Method Details

#authorize(error_policy = default_error_policy) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/access_policy/policy_enforcer.rb', line 20

def authorize(error_policy=default_error_policy)
  raise(PolicyEnforcer::NotAuthorizedError, "not allowed to #{query} this #{object_or_class}" ) unless _guard_action()
  yield true if block_given?
  true
rescue
  error_policy.call(object_or_class)
end

#policy(error_policy = default_error_policy) ⇒ Object



28
29
30
31
32
# File 'lib/access_policy/policy_enforcer.rb', line 28

def policy(error_policy=default_error_policy)
  specific_policy_for_class.new(current_user_or_role, object_or_class)
rescue
  error_policy.call(object_or_class)
end