Class: AccessPolicy::PolicyCheck

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(default_error_policy: ->(*) { raise }, scope_storage: ScopedStorage::ThreadLocalStorage) ⇒ PolicyCheck

Returns a new instance of PolicyCheck.



7
8
9
10
11
12
# File 'lib/access_policy/policy_check.rb', line 7

def initialize(default_error_policy: ->(*) { raise },
    scope_storage: ScopedStorage::ThreadLocalStorage)

  self.default_error_policy = default_error_policy
  self.scope_storage = scope_storage
end

Instance Attribute Details

#default_error_policyObject

Returns the value of attribute default_error_policy.



5
6
7
# File 'lib/access_policy/policy_check.rb', line 5

def default_error_policy
  @default_error_policy
end

#scope_storageObject

Returns the value of attribute scope_storage.



5
6
7
# File 'lib/access_policy/policy_check.rb', line 5

def scope_storage
  @scope_storage
end

Instance Method Details

#authorize(object_to_guard, action_to_guard, error_policy: default_error_policy) ⇒ Object



15
16
17
18
19
# File 'lib/access_policy/policy_check.rb', line 15

def authorize(object_to_guard, action_to_guard, error_policy: default_error_policy)
  PolicyEnforcer.new(current_user_or_role_for_policy, object_to_guard, action_to_guard).authorize(error_policy) do
    self.policy_authorize_called=true
  end
end

#current_user_or_role_for_policyObject



42
43
44
# File 'lib/access_policy/policy_check.rb', line 42

def current_user_or_role_for_policy
  scope['current_user_or_role_for_policy']
end

#current_user_or_role_for_policy=(new_user) ⇒ Object



38
39
40
# File 'lib/access_policy/policy_check.rb', line 38

def current_user_or_role_for_policy=(new_user)
  scope['current_user_or_role_for_policy'] = new_user
end

#policy_authorize_called=(new_value) ⇒ Object



46
47
48
# File 'lib/access_policy/policy_check.rb', line 46

def policy_authorize_called=(new_value)
  scope['policy_authorize_called'] = new_value
end

#policy_authorize_called?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/access_policy/policy_check.rb', line 50

def policy_authorize_called?
  !!policy_authorize_called
end

#policy_for(object_or_class, error_policy = default_error_policy) ⇒ Object



21
22
23
# File 'lib/access_policy/policy_check.rb', line 21

def policy_for(object_or_class, error_policy = default_error_policy)
  PolicyEnforcer.new(current_user_or_role_for_policy, object_or_class).policy(error_policy)
end

#with_user_or_role(new_current_user_or_role_for_policy, error_policy = default_error_policy) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/access_policy/policy_check.rb', line 25

def with_user_or_role(new_current_user_or_role_for_policy, error_policy = default_error_policy)
  self.policy_authorize_called = false

  switched_user_or_role(new_current_user_or_role_for_policy) do
    begin
      yield if block_given?
      raise(AccessPolicy::AuthorizeNotCalledError, "#{new_current_user_or_role_for_policy}") unless policy_authorize_called?
    rescue => e
      error_policy.call(e)
    end
  end
end