Class: SimpleAccess::Authorizor
- Inherits:
-
Object
- Object
- SimpleAccess::Authorizor
show all
- Defined in:
- lib/simple_access/authorizor.rb
Defined Under Namespace
Classes: AuthorizorNotFound
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of Authorizor.
18
19
20
|
# File 'lib/simple_access/authorizor.rb', line 18
def initialize(user)
@user = user
end
|
Instance Attribute Details
#user ⇒ Object
Returns the value of attribute user.
16
17
18
|
# File 'lib/simple_access/authorizor.rb', line 16
def user
@user
end
|
Instance Method Details
#authorization_model_for(klass) ⇒ Object
53
54
55
|
# File 'lib/simple_access/authorizor.rb', line 53
def authorization_model_for(klass)
authorization_models[klass]
end
|
#authorization_models ⇒ Object
57
58
59
|
# File 'lib/simple_access/authorizor.rb', line 57
def authorization_models
raise "Must define authorization models: { User => UserPolicy }"
end
|
#authorizors ⇒ Object
61
62
63
|
# File 'lib/simple_access/authorizor.rb', line 61
def authorizors
@authorizors ||= {}
end
|
#can?(action, klass_or_instance) ⇒ Boolean
26
27
28
|
# File 'lib/simple_access/authorizor.rb', line 26
def can?(action, klass_or_instance)
query_authorizor(action, klass_or_instance) || false
end
|
#defer?(action, klass_or_instance) ⇒ Boolean
22
23
24
|
# File 'lib/simple_access/authorizor.rb', line 22
def defer?(action, klass_or_instance)
can?(action, klass_or_instance)
end
|
#find_authorizor(klass_or_instance) ⇒ Object
44
45
46
47
48
49
50
51
|
# File 'lib/simple_access/authorizor.rb', line 44
def find_authorizor(klass_or_instance)
klass = klass_or_instance.respond_to?(:allocate) ? klass_or_instance : klass_or_instance.class
if authorization_model = authorization_model_for(klass)
authorizors[klass] ||= authorization_model.new(user)
authorizors[klass]
end
end
|
#query_authorizor(action, klass_or_instance) ⇒ Object
30
31
32
33
34
35
36
37
38
|
# File 'lib/simple_access/authorizor.rb', line 30
def query_authorizor(action, klass_or_instance)
authorizor = find_authorizor(klass_or_instance) || raise(AuthorizorNotFound.new(action, klass_or_instance))
method_id = "#{action}?"
if klass_or_instance.is_a?(Class) || static_method?(authorizor, method_id)
authorizor.__send__(method_id)
else
authorizor.__send__(method_id, klass_or_instance)
end
end
|
#static_method?(authorizor, method_id) ⇒ Boolean
40
41
42
|
# File 'lib/simple_access/authorizor.rb', line 40
def static_method?(authorizor, method_id)
authorizor.method(method_id).arity == 0
end
|