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_authorized=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_authorized=(new_value) ⇒ Object



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

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

#policy_authorized?Boolean

Returns:

  • (Boolean)


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

def policy_authorized?
  !!policy_authorized
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_authorized = false

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