Class: SimpleAccess::Authorizor

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_access/authorizor.rb

Defined Under Namespace

Classes: AuthorizorNotFound

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user) ⇒ Authorizor

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

#userObject (readonly)

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_modelsObject



57
58
59
# File 'lib/simple_access/authorizor.rb', line 57

def authorization_models
  raise "Must define authorization models: { User => UserPolicy }"
end

#authorizorsObject



61
62
63
# File 'lib/simple_access/authorizor.rb', line 61

def authorizors
  @authorizors ||= {}
end

#can?(action, klass_or_instance) ⇒ Boolean

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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