casbin-ruby 1.0.10 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +14 -1
- data/lib/casbin-ruby/config.rb +20 -0
- data/lib/casbin-ruby/core_enforcer.rb +25 -23
- data/lib/casbin-ruby/logger.rb +17 -0
- data/lib/casbin-ruby/model/assertion.rb +2 -4
- data/lib/casbin-ruby/model/model.rb +4 -3
- data/lib/casbin-ruby/model/policy.rb +5 -6
- data/lib/casbin-ruby/rbac/default_role_manager/role_manager.rb +3 -5
- data/lib/casbin-ruby/version.rb +1 -1
- data/lib/casbin-ruby.rb +1 -0
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a6fa41ab5193602d852ba7652d0d92775f1a26243471d154188aca17a5a3a67
|
4
|
+
data.tar.gz: 19174a79a646b395960fd842bec794f8a202d283396c802d872ce7e88914763a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c40a77ea91e4addeba67652af4fe0bd1af3151f67e2bdfc3625f4c90e295a643d3f2d221446957ebd3a1f4321e3a1869a822a31102c5a6cdf78da3dd572e35d
|
7
|
+
data.tar.gz: 29c3ff1985b8e1480ce596763ce621790cf19f6676649efc6d6e4ac8bb06c476f3d8618db2e72a89a40e1f277da36a5eba5ba598040a4dd3ada102b91fe9c390
|
data/README.md
CHANGED
@@ -151,7 +151,20 @@ https://casbin.org/docs/en/tutorials
|
|
151
151
|
1. New a Casbin enforcer with a model file and a policy file:
|
152
152
|
|
153
153
|
```ruby
|
154
|
-
|
154
|
+
require 'casbin-ruby'
|
155
|
+
Casbin::Config.setup do |config|
|
156
|
+
config.model = "path/to/model.conf" # default: nil
|
157
|
+
config.adapter = "path/to/policy.csv" # default: nil
|
158
|
+
config.watcher = Casbin::SomeWatcher # default: nil
|
159
|
+
config.logger = Logger.new($stdout) # default: Logger.new($stdout, level: :error)
|
160
|
+
end
|
161
|
+
|
162
|
+
enforcer = Casbin::Enforcer.new
|
163
|
+
```
|
164
|
+
|
165
|
+
OR
|
166
|
+
|
167
|
+
```ruby
|
155
168
|
require 'casbin-ruby'
|
156
169
|
enforcer = Casbin::Enforcer.new("path/to/model.conf", "path/to/policy.csv")
|
157
170
|
```
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
module Casbin
|
6
|
+
module Config
|
7
|
+
class << self
|
8
|
+
attr_writer :logger
|
9
|
+
attr_accessor :adapter, :model, :watcher
|
10
|
+
|
11
|
+
def setup
|
12
|
+
yield self
|
13
|
+
end
|
14
|
+
|
15
|
+
def logger
|
16
|
+
@logger ||= ::Logger.new($stdout, level: :error)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -9,46 +9,50 @@ require 'casbin-ruby/rbac/default_role_manager/role_manager'
|
|
9
9
|
require 'casbin-ruby/util'
|
10
10
|
require 'casbin-ruby/util/builtin_operators'
|
11
11
|
require 'casbin-ruby/util/evaluator'
|
12
|
-
|
13
|
-
require '
|
12
|
+
require 'casbin-ruby/logger'
|
13
|
+
require 'casbin-ruby/config'
|
14
14
|
|
15
15
|
module Casbin
|
16
16
|
# CoreEnforcer defines the core functionality of an enforcer.
|
17
17
|
# get_attr/set_attr methods is ported from Python as attr/attr=
|
18
18
|
class CoreEnforcer
|
19
|
-
def initialize(model = nil, adapter = nil,
|
19
|
+
def initialize(model = nil, adapter = nil, watcher = nil)
|
20
|
+
model ||= Config.model
|
21
|
+
adapter ||= Config.adapter
|
22
|
+
@watcher = watcher || Config.watcher
|
23
|
+
|
20
24
|
if model.is_a? String
|
21
25
|
if adapter.is_a? String
|
22
|
-
init_with_file(model, adapter
|
26
|
+
init_with_file(model, adapter)
|
23
27
|
else
|
24
|
-
init_with_adapter(model, adapter
|
28
|
+
init_with_adapter(model, adapter)
|
25
29
|
end
|
26
30
|
elsif adapter.is_a? String
|
27
31
|
raise 'Invalid parameters for enforcer.'
|
28
32
|
else
|
29
|
-
init_with_model_and_adapter(model, adapter
|
33
|
+
init_with_model_and_adapter(model, adapter)
|
30
34
|
end
|
31
35
|
end
|
32
36
|
|
33
|
-
attr_accessor :
|
34
|
-
attr_reader :model
|
37
|
+
attr_accessor :auto_build_role_links, :auto_save, :effector, :enabled, :rm_map
|
38
|
+
attr_reader :adapter, :model, :watcher
|
35
39
|
|
36
40
|
# initializes an enforcer with a model file and a policy file.
|
37
|
-
def init_with_file(model_path, policy_path
|
41
|
+
def init_with_file(model_path, policy_path)
|
38
42
|
a = Persist::Adapters::FileAdapter.new(policy_path)
|
39
|
-
init_with_adapter(model_path, a
|
43
|
+
init_with_adapter(model_path, a)
|
40
44
|
end
|
41
45
|
|
42
46
|
# initializes an enforcer with a database adapter.
|
43
|
-
def init_with_adapter(model_path, adapter = nil
|
47
|
+
def init_with_adapter(model_path, adapter = nil)
|
44
48
|
m = new_model(model_path)
|
45
|
-
init_with_model_and_adapter(m, adapter
|
49
|
+
init_with_model_and_adapter(m, adapter)
|
46
50
|
|
47
51
|
self.model_path = model_path
|
48
52
|
end
|
49
53
|
|
50
54
|
# initializes an enforcer with a model and a database adapter.
|
51
|
-
def init_with_model_and_adapter(m, adapter = nil
|
55
|
+
def init_with_model_and_adapter(m, adapter = nil)
|
52
56
|
if !m.is_a?(Model::Model) || (!adapter.nil? && !adapter.is_a?(Persist::Adapter))
|
53
57
|
raise StandardError, 'Invalid parameters for enforcer.'
|
54
58
|
end
|
@@ -59,15 +63,15 @@ module Casbin
|
|
59
63
|
model.print_model
|
60
64
|
self.fm = Model::FunctionMap.load_function_map
|
61
65
|
|
62
|
-
init
|
66
|
+
init
|
63
67
|
|
64
68
|
# Do not initialize the full policy when using a filtered adapter
|
65
69
|
load_policy if adapter && !filtered?
|
66
70
|
end
|
67
71
|
|
68
72
|
# creates a model.
|
69
|
-
def self.new_model(path = '', text = ''
|
70
|
-
m = Model::Model.new
|
73
|
+
def self.new_model(path = '', text = '')
|
74
|
+
m = Model::Model.new
|
71
75
|
if path.length.positive?
|
72
76
|
m.load_model(path)
|
73
77
|
else
|
@@ -291,13 +295,13 @@ module Casbin
|
|
291
295
|
protected
|
292
296
|
|
293
297
|
attr_accessor :model_path, :fm, :auto_motify_watcher
|
294
|
-
attr_reader :logger
|
295
298
|
|
296
299
|
private
|
297
300
|
|
298
301
|
attr_accessor :matcher_map
|
302
|
+
attr_writer :adapter
|
299
303
|
|
300
|
-
def init
|
304
|
+
def init
|
301
305
|
self.rm_map = {}
|
302
306
|
self.effector = Effect::DefaultEffector.get_effector(model.model['e']['e'].value)
|
303
307
|
|
@@ -305,8 +309,6 @@ module Casbin
|
|
305
309
|
self.auto_save = true
|
306
310
|
self.auto_build_role_links = true
|
307
311
|
|
308
|
-
@logger = logger
|
309
|
-
|
310
312
|
init_rm_map
|
311
313
|
end
|
312
314
|
|
@@ -338,10 +340,10 @@ module Casbin
|
|
338
340
|
req_str = "Request: #{rvals.map(&:to_s).join ', '} ---> #{result}"
|
339
341
|
|
340
342
|
if result
|
341
|
-
|
343
|
+
Logger.info(req_str)
|
342
344
|
else
|
343
345
|
# leaving this in error for now, if it's very noise this can be changed to info or debug
|
344
|
-
|
346
|
+
Logger.error(req_str)
|
345
347
|
end
|
346
348
|
end
|
347
349
|
|
@@ -349,7 +351,7 @@ module Casbin
|
|
349
351
|
return unless model.model.keys.include?('g')
|
350
352
|
|
351
353
|
model.model['g'].each_key do |ptype|
|
352
|
-
rm_map[ptype] = Rbac::DefaultRoleManager::RoleManager.new(10
|
354
|
+
rm_map[ptype] = Rbac::DefaultRoleManager::RoleManager.new(10)
|
353
355
|
end
|
354
356
|
end
|
355
357
|
end
|
@@ -1,19 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'logger'
|
3
|
+
require 'casbin-ruby/logger'
|
4
4
|
|
5
5
|
module Casbin
|
6
6
|
module Model
|
7
7
|
class Assertion
|
8
8
|
attr_accessor :key, :value, :tokens, :policy, :rm
|
9
|
-
attr_reader :logger
|
10
9
|
|
11
10
|
def initialize(hash = {})
|
12
11
|
@key = hash[:key].to_s
|
13
12
|
@value = hash[:value].to_s
|
14
13
|
@tokens = [*hash[:tokens]]
|
15
14
|
@policy = [*hash[:policy]]
|
16
|
-
@logger = hash[:logger] || Logger.new($stdout)
|
17
15
|
end
|
18
16
|
|
19
17
|
def build_role_links(rm)
|
@@ -24,7 +22,7 @@ module Casbin
|
|
24
22
|
raise 'grouping policy elements do not meet role definition' if rule.size < count
|
25
23
|
|
26
24
|
rm.add_link(*rule)
|
27
|
-
|
25
|
+
Logger.info("Role links for: #{key}")
|
28
26
|
rm.print_roles
|
29
27
|
end
|
30
28
|
end
|
@@ -4,6 +4,7 @@ require 'casbin-ruby/model/policy'
|
|
4
4
|
require 'casbin-ruby/model/assertion'
|
5
5
|
require 'casbin-ruby/config/config'
|
6
6
|
require 'casbin-ruby/util'
|
7
|
+
require 'casbin-ruby/logger'
|
7
8
|
|
8
9
|
module Casbin
|
9
10
|
module Model
|
@@ -29,7 +30,7 @@ module Casbin
|
|
29
30
|
def add_def(sec, key, value)
|
30
31
|
return false if value == ''
|
31
32
|
|
32
|
-
ast = Assertion.new(key: key, value: value
|
33
|
+
ast = Assertion.new(key: key, value: value)
|
33
34
|
%w[r p].include?(sec) ? ast_tokens_set(ast, key) : model_sec_set(ast)
|
34
35
|
|
35
36
|
model[sec] ||= {}
|
@@ -37,11 +38,11 @@ module Casbin
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def print_model
|
40
|
-
|
41
|
+
Logger.info 'Model:'
|
41
42
|
|
42
43
|
model.each do |k, v|
|
43
44
|
v.each do |i, j|
|
44
|
-
|
45
|
+
Logger.info "#{k}.#{i}: #{j.value}"
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
@@ -1,15 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'logger'
|
3
|
+
require 'casbin-ruby/logger'
|
4
4
|
|
5
5
|
module Casbin
|
6
6
|
module Model
|
7
7
|
class Policy
|
8
|
-
attr_reader :model
|
8
|
+
attr_reader :model
|
9
9
|
|
10
|
-
def initialize
|
10
|
+
def initialize
|
11
11
|
@model = {}
|
12
|
-
@logger = logger
|
13
12
|
end
|
14
13
|
|
15
14
|
# initializes the roles in RBAC.
|
@@ -24,13 +23,13 @@ module Casbin
|
|
24
23
|
|
25
24
|
# Log using info
|
26
25
|
def print_policy
|
27
|
-
|
26
|
+
Logger.info 'Policy:'
|
28
27
|
|
29
28
|
%w[p g].each do |sec|
|
30
29
|
next unless model.key? sec
|
31
30
|
|
32
31
|
model[sec].each do |key, ast|
|
33
|
-
|
32
|
+
Logger.info "#{key} : #{ast.value} : #{ast.policy}"
|
34
33
|
end
|
35
34
|
end
|
36
35
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'logger'
|
4
3
|
require 'casbin-ruby/rbac/role_manager'
|
5
4
|
require 'casbin-ruby/rbac/default_role_manager/role'
|
5
|
+
require 'casbin-ruby/logger'
|
6
6
|
|
7
7
|
module Casbin
|
8
8
|
module Rbac
|
@@ -10,11 +10,9 @@ module Casbin
|
|
10
10
|
# provides a default implementation for the RoleManager interface
|
11
11
|
class RoleManager < Rbac::RoleManager
|
12
12
|
attr_accessor :all_roles, :max_hierarchy_level, :matching_func, :has_domain_pattern, :domain_matching_func
|
13
|
-
attr_reader :logger
|
14
13
|
|
15
|
-
def initialize(max_hierarchy_level
|
14
|
+
def initialize(max_hierarchy_level)
|
16
15
|
super()
|
17
|
-
@logger = logger
|
18
16
|
@all_roles = {}
|
19
17
|
@max_hierarchy_level = max_hierarchy_level
|
20
18
|
end
|
@@ -120,7 +118,7 @@ module Casbin
|
|
120
118
|
|
121
119
|
def print_roles
|
122
120
|
line = all_roles.map { |_key, role| role.to_string }.compact
|
123
|
-
|
121
|
+
Logger.info(line.join(', '))
|
124
122
|
end
|
125
123
|
|
126
124
|
private
|
data/lib/casbin-ruby/version.rb
CHANGED
data/lib/casbin-ruby.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: casbin-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Kutyavin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-09-
|
12
|
+
date: 2021-09-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: keisan
|
@@ -78,6 +78,7 @@ extra_rdoc_files: []
|
|
78
78
|
files:
|
79
79
|
- README.md
|
80
80
|
- lib/casbin-ruby.rb
|
81
|
+
- lib/casbin-ruby/config.rb
|
81
82
|
- lib/casbin-ruby/config/config.rb
|
82
83
|
- lib/casbin-ruby/core_enforcer.rb
|
83
84
|
- lib/casbin-ruby/effect/allow_and_deny_effector.rb
|
@@ -88,6 +89,7 @@ files:
|
|
88
89
|
- lib/casbin-ruby/effect/priority_effector.rb
|
89
90
|
- lib/casbin-ruby/enforcer.rb
|
90
91
|
- lib/casbin-ruby/internal_enforcer.rb
|
92
|
+
- lib/casbin-ruby/logger.rb
|
91
93
|
- lib/casbin-ruby/management_enforcer.rb
|
92
94
|
- lib/casbin-ruby/model/assertion.rb
|
93
95
|
- lib/casbin-ruby/model/function_map.rb
|
@@ -141,11 +143,11 @@ specification_version: 4
|
|
141
143
|
summary: Casbin in Ruby
|
142
144
|
test_files:
|
143
145
|
- spec/support/model_helper.rb
|
144
|
-
- spec/casbin/
|
145
|
-
- spec/casbin/rbac/default_role_manager/role_manager_spec.rb
|
146
|
+
- spec/casbin/config/config_spec.rb
|
146
147
|
- spec/casbin/enforcer_spec.rb
|
147
|
-
- spec/casbin/
|
148
|
+
- spec/casbin/model/function_map_spec.rb
|
148
149
|
- spec/casbin/util_spec.rb
|
149
150
|
- spec/casbin/core_enforcer_spec.rb
|
150
|
-
- spec/casbin/
|
151
|
-
- spec/casbin/
|
151
|
+
- spec/casbin/util/builtin_operators_spec.rb
|
152
|
+
- spec/casbin/rbac/default_role_manager/role_manager_spec.rb
|
153
|
+
- spec/casbin/rbac/default_role_manager/role_spec.rb
|