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_link(name1, name2, *domain)
click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 51 def add_link(name1, name2, *domain) names = names_by_domain(name1, name2, *domain) role1 = create_role(names[0]) role2 = create_role(names[1]) role1.add_role(role2) 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
delete_link(name1, name2, *domain)
click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 59 def delete_link(name1, name2, *domain) names = names_by_domain(name1, name2, *domain) raise 'error: name1 or name2 does not exist' if !has_role(names[0]) || !has_role(names[1]) role1 = create_role(names[0]) role2 = create_role(names[1]) role1.delete_role(role2) 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_link(name1, name2, *domain)
click to toggle source
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 69 def has_link(name1, name2, *domain) names = names_by_domain(name1, name2, *domain) return true if names[0] == names[1] return false if !has_role(names[0]) || !has_role(names[1]) if matching_func.nil? role1 = create_role names[0] role1.has_role names[1], max_hierarchy_level else all_roles.each do |key, role| return true if matching_func.call(names[0], key) && role.has_role(names[1], max_hierarchy_level) end false end 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
# File lib/casbin-ruby/rbac/default_role_manager/role_manager.rb, line 119 def print_roles line = all_roles.map { |_key, role| role.to_string }.compact Logger.info(line.join(', ')) end
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