class Casbin::Rbac::DefaultRoleManager::RoleManager

provides a default implementation for the RoleManager interface

Attributes

all_roles[RW]
domain_matching_func[RW]
has_domain_pattern[RW]
matching_func[RW]
max_hierarchy_level[RW]

Public Class Methods

new(max_hierarchy_level) click to toggle source
Calls superclass method
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 14
def initialize(max_hierarchy_level)
  super()
  @all_roles = {}
  @max_hierarchy_level = max_hierarchy_level
end

Public Instance Methods

add_domain_matching_func(fn) click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 24
def add_domain_matching_func(fn)
  self.has_domain_pattern = true
  self.domain_matching_func = fn
end
add_matching_func(fn) click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 20
def add_matching_func(fn)
  @matching_func = fn
end
clear() click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 47
def clear
  @all_roles = {}
end
create_role(name) click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 36
def create_role(name)
  all_roles[name] = Role.new(name) unless all_roles.key?(name)
  if matching_func
    all_roles.each do |key, role|
      all_roles[name].add_role(role) if matching_func.call(name, key) && name != key
    end
  end

  all_roles[name]
end
get_roles(name, *domain) click to toggle source

gets the roles that a subject inherits. domain is a prefix to the roles.

# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 90
def get_roles(name, *domain)
  name = name_by_domain(name, *domain)
  return [] unless has_role(name)

  roles = create_role(name).get_roles
  if domain.size == 1
    roles.each_with_index { |value, index| roles[index] = value[domain[0].size + 2..value.size] }
  end

  roles
end
get_users(name, *domain) click to toggle source

gets the users that inherits a subject. domain is an unreferenced parameter here, may be used in other implementations.

# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 104
def get_users(name, *domain)
  name = name_by_domain(name, *domain)
  return [] unless has_role(name)

  all_roles.map do |_key, role|
    next unless role.has_direct_role(name)

    if domain.size == 1
      role.name[domain[0].size + 2..role.name.size]
    else
      role.name
    end
  end.compact
end
has_role(name) click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 29
def has_role(name)
  return all_roles.key?(name) if matching_func.nil?

  all_roles.each_key { |key| return true if matching_func.call(name, key) }
  false
end
print_roles() click to toggle source

Private Instance Methods

name_by_domain(name, *domain) click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 136
def name_by_domain(name, *domain)
  raise 'error: domain should be 1 parameter' if domain.size > 1

  domain.size == 1 ? "#{domain[0]}::#{name}" : name
end
names_by_domain(name1, name2, *domain) click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 126
def names_by_domain(name1, name2, *domain)
  raise 'error: domain should be 1 parameter' if domain.size > 1

  if domain.size.zero?
    [name1, name2]
  else
    %W[#{domain[0]}::#{name1} #{domain[0]}::#{name2}]
  end
end