class Rolypoly::RoleScope

Attributes

actions[RW]
all_actions[RW]
resource[RW]
roles[RW]

Public Class Methods

new(roles, actions, resource = nil) click to toggle source
# File lib/rolypoly/role_scope.rb, line 6
def initialize(roles, actions, resource = nil)
  self.roles = Set.new Array(roles).map(&:to_s)
  self.actions = Set.new Array(actions).map(&:to_s)
  self.resource = resource
  self.all_actions = false
end

Public Instance Methods

action?(check_actions) click to toggle source
# File lib/rolypoly/role_scope.rb, line 54
def action?(check_actions)
  check_actions = Set.new Array(check_actions).map(&:to_s)
  all_actions? || !(check_actions & actions).empty?
end
all_actions?() click to toggle source
# File lib/rolypoly/role_scope.rb, line 59
def all_actions?
  !!all_actions
end
allow(*roles) click to toggle source

on(resource).allow(*roles).to_access(*actions)

# File lib/rolypoly/role_scope.rb, line 19
def allow(*roles)
  self.roles = self.roles.merge(roles.flatten.compact.map(&:to_s))
  self
end
allow?(current_roles, action) click to toggle source
# File lib/rolypoly/role_scope.rb, line 41
def allow?(current_roles, action)
  action?(action) && role?(current_roles)
end
allowed_roles(current_roles, action) click to toggle source
# File lib/rolypoly/role_scope.rb, line 45
def allowed_roles(current_roles, action)
  return [] unless action?(action)
  match_roles(current_roles)
end
initialize_copy(other) click to toggle source
# File lib/rolypoly/role_scope.rb, line 13
def initialize_copy(other)
  @roles = @roles.dup
  @actions = @actions.dup
end
on(resource) click to toggle source

allow(*roles).on(resource).to_access(*actions)

# File lib/rolypoly/role_scope.rb, line 25
def on(resource)
  self.resource = resource
  self
end
role?(check_roles) click to toggle source
# File lib/rolypoly/role_scope.rb, line 50
def role?(check_roles)
  Array(check_roles).any? { |check_role| allowed_role?(check_role) }
end
to_access(*actions) click to toggle source

allow(*roles).to_access *actions

# File lib/rolypoly/role_scope.rb, line 31
def to_access(*actions)
  self.actions = self.actions.merge actions.flatten.compact.map(&:to_s)
end
to_all() click to toggle source

allow role access to all actions allow(*roles).to_all

# File lib/rolypoly/role_scope.rb, line 37
def to_all
  self.all_actions = true
end

Private Instance Methods

allowed_resource?(check_role, required_resource) click to toggle source
# File lib/rolypoly/role_scope.rb, line 63
        def allowed_resource?(check_role, required_resource)
  return false unless check_role.respond_to?(:resource?)

  required_resources = type_id_resource?(required_resource) ? [required_resource] : Array(required_resource)
  required_resources.any? { |r| check_role.resource?(r) }
end
allowed_role?(role_object) click to toggle source
# File lib/rolypoly/role_scope.rb, line 86
        def allowed_role?(role_object)
  role_string = role_object.respond_to?(:to_role_string) ? role_object.to_role_string : role_object.to_s

  roles.include?(role_string.to_s)
end
match_roles(check_roles) click to toggle source
# File lib/rolypoly/role_scope.rb, line 80
        def match_roles(check_roles)
  Array(check_roles).select do |check_role|
    allowed_role?(check_role)
  end
end
type_id_resource?(required_resource) click to toggle source
# File lib/rolypoly/role_scope.rb, line 70
        def type_id_resource?(required_resource)
  required_resource.is_a?(Array) && %w(String Symbol).include?(required_resource.first.class.name)
end