Module: Eaco::Resource::ClassMethods

Defined in:
lib/eaco/resource.rb

Overview

Singleton methods added to authorized Resources.

Instance Method Summary collapse

Instance Method Details

#allows?(action, actor, resource) ⇒ Boolean

Checks whether the ACL and permissions defined on this Resource allow the given actor to perform the given action on it, that depends on the role the user has on the resource, calculated from the ACL.

Parameters:

Returns:

  • (Boolean)


55
56
57
58
59
60
61
62
63
64
65
# File 'lib/eaco/resource.rb', line 55

def allows?(action, actor, resource)
  return true if actor.is_admin?

  role = role_of(actor, resource)
  return false unless role

  perms = permissions[role]
  return false unless perms

  perms.include?(action)
end

#permissionsObject

The permissions defined for each role.



108
109
# File 'lib/eaco/resource.rb', line 108

def permissions
end

#role?(role) ⇒ Boolean

context of this Resource.

Parameters:

  • role (Symbol)

    role name.

Returns:

  • (Boolean)

    checks whether the given role is valid in the



39
40
41
# File 'lib/eaco/resource.rb', line 39

def role?(role)
  role.to_sym.in?(roles)
end

#role_of(actor_or_designator, resource) ⇒ Symbol

access is granted.

Parameters:

Returns:

  • (Symbol)

    the given actor role in the given resource, or nil if no



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/eaco/resource.rb', line 74

def role_of(actor_or_designator, resource)
  designators = if actor_or_designator.is_a?(Eaco::Designator)
    [actor_or_designator]

  elsif actor_or_designator.respond_to?(:designators)
    actor_or_designator.designators

  else
    raise Error, "      \#{__method__} expects \#{actor_or_designator.inspect}\n      to be a Designator or to `respond_to?(:designators)`\n    EOF\n  end\n\n  role_priority = nil\n  resource.acl.each do |designator, role|\n    if designators.include?(designator)\n      priority = roles_priority[role]\n    end\n\n    if priority && (role_priority.nil? || priority < role_priority)\n      role_priority = priority\n      break if role_priority == 0\n    end\n  end\n\n  roles[role_priority] if role_priority\nend\n"

#rolesObject

The defined roles.



115
116
# File 'lib/eaco/resource.rb', line 115

def roles
end

#roles_priorityObject

Roles’ priority map keyed by role symbol.



122
123
# File 'lib/eaco/resource.rb', line 122

def roles_priority
end

#roles_with_labelsObject

Role labels map keyed by role symbol



129
130
# File 'lib/eaco/resource.rb', line 129

def roles_with_labels
end