Class: Casbin::Rbac::DefaultRoleManager::RoleManager

Inherits:
RoleManager
  • Object
show all
Defined in:
lib/casbin-ruby/rbac/default_role_manager/role_manager.rb

Overview

provides a default implementation for the RoleManager interface

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(max_hierarchy_level) ⇒ RoleManager

Returns a new instance of RoleManager.



14
15
16
17
18
# 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

Instance Attribute Details

#all_rolesObject

Returns the value of attribute all_roles.



12
13
14
# File 'lib/casbin-ruby/rbac/default_role_manager/role_manager.rb', line 12

def all_roles
  @all_roles
end

#domain_matching_funcObject

Returns the value of attribute domain_matching_func.



12
13
14
# File 'lib/casbin-ruby/rbac/default_role_manager/role_manager.rb', line 12

def domain_matching_func
  @domain_matching_func
end

#has_domain_patternObject

Returns the value of attribute has_domain_pattern.



12
13
14
# File 'lib/casbin-ruby/rbac/default_role_manager/role_manager.rb', line 12

def has_domain_pattern
  @has_domain_pattern
end

#matching_funcObject

Returns the value of attribute matching_func.



12
13
14
# File 'lib/casbin-ruby/rbac/default_role_manager/role_manager.rb', line 12

def matching_func
  @matching_func
end

#max_hierarchy_levelObject

Returns the value of attribute max_hierarchy_level.



12
13
14
# File 'lib/casbin-ruby/rbac/default_role_manager/role_manager.rb', line 12

def max_hierarchy_level
  @max_hierarchy_level
end

Instance Method Details

#add_domain_matching_func(fn) ⇒ Object



24
25
26
27
# 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


51
52
53
54
55
56
57
# 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) ⇒ Object



20
21
22
# File 'lib/casbin-ruby/rbac/default_role_manager/role_manager.rb', line 20

def add_matching_func(fn)
  @matching_func = fn
end

#clearObject



47
48
49
# File 'lib/casbin-ruby/rbac/default_role_manager/role_manager.rb', line 47

def clear
  @all_roles = {}
end

#create_role(name) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# 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


59
60
61
62
63
64
65
66
67
# 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) ⇒ Object

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



90
91
92
93
94
95
96
97
98
99
100
# 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) ⇒ Object

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



104
105
106
107
108
109
110
111
112
113
114
115
116
117
# 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


69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 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) ⇒ Object



29
30
31
32
33
34
# 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


119
120
121
122
# 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