Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,20 @@ https://casbin.org/docs/en/tutorials
1. New a Casbin enforcer with a model file and a policy file:

```ruby
# TODO: correct `require`
require 'casbin-ruby'
Casbin::Config.setup do |config|
config.model = "path/to/model.conf" # default: nil
config.adapter = "path/to/policy.csv" # default: nil
config.watcher = Casbin::SomeWatcher # default: nil
config.logger = Logger.new($stdout) # default: Logger.new($stdout, level: :error)
end

enforcer = Casbin::Enforcer.new
```

OR

```ruby
require 'casbin-ruby'
enforcer = Casbin::Enforcer.new("path/to/model.conf", "path/to/policy.csv")
```
Expand Down
1 change: 1 addition & 0 deletions lib/casbin-ruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module Casbin
require 'casbin-ruby/version'
require 'casbin-ruby/enforcer'
require 'casbin-ruby/synced_enforcer'
require 'casbin-ruby/config'

module Persist
require 'casbin-ruby/persist/adapter'
Expand Down
20 changes: 20 additions & 0 deletions lib/casbin-ruby/config.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# frozen_string_literal: true

require 'logger'

module Casbin
module Config
class << self
attr_writer :logger
attr_accessor :adapter, :model, :watcher
Comment thread
jokius marked this conversation as resolved.

def setup
yield self
end

def logger
@logger ||= ::Logger.new($stdout, level: :error)
end
end
end
end
48 changes: 25 additions & 23 deletions lib/casbin-ruby/core_enforcer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,46 +9,50 @@
require 'casbin-ruby/util'
require 'casbin-ruby/util/builtin_operators'
require 'casbin-ruby/util/evaluator'

require 'logger'
require 'casbin-ruby/logger'
require 'casbin-ruby/config'

module Casbin
# CoreEnforcer defines the core functionality of an enforcer.
# get_attr/set_attr methods is ported from Python as attr/attr=
class CoreEnforcer
def initialize(model = nil, adapter = nil, logger: Logger.new($stdout))
def initialize(model = nil, adapter = nil, watcher = nil)
model ||= Config.model
adapter ||= Config.adapter
@watcher = watcher || Config.watcher

if model.is_a? String
if adapter.is_a? String
init_with_file(model, adapter, logger: logger)
init_with_file(model, adapter)
else
init_with_adapter(model, adapter, logger: logger)
init_with_adapter(model, adapter)
end
elsif adapter.is_a? String
raise 'Invalid parameters for enforcer.'
else
init_with_model_and_adapter(model, adapter, logger: logger)
init_with_model_and_adapter(model, adapter)
end
end

attr_accessor :adapter, :auto_build_role_links, :auto_save, :effector, :enabled, :watcher, :rm_map
attr_reader :model
attr_accessor :auto_build_role_links, :auto_save, :effector, :enabled, :rm_map
attr_reader :adapter, :model, :watcher

# initializes an enforcer with a model file and a policy file.
def init_with_file(model_path, policy_path, logger: Logger.new($stdout))
def init_with_file(model_path, policy_path)
a = Persist::Adapters::FileAdapter.new(policy_path)
init_with_adapter(model_path, a, logger: logger)
init_with_adapter(model_path, a)
end

# initializes an enforcer with a database adapter.
def init_with_adapter(model_path, adapter = nil, logger: Logger.new($stdout))
def init_with_adapter(model_path, adapter = nil)
m = new_model(model_path)
init_with_model_and_adapter(m, adapter, logger: logger)
init_with_model_and_adapter(m, adapter)

self.model_path = model_path
end

# initializes an enforcer with a model and a database adapter.
def init_with_model_and_adapter(m, adapter = nil, logger: Logger.new($stdout))
def init_with_model_and_adapter(m, adapter = nil)
if !m.is_a?(Model::Model) || (!adapter.nil? && !adapter.is_a?(Persist::Adapter))
raise StandardError, 'Invalid parameters for enforcer.'
end
Expand All @@ -59,15 +63,15 @@ def init_with_model_and_adapter(m, adapter = nil, logger: Logger.new($stdout))
model.print_model
self.fm = Model::FunctionMap.load_function_map

init(logger: logger)
init

# Do not initialize the full policy when using a filtered adapter
load_policy if adapter && !filtered?
end

# creates a model.
def self.new_model(path = '', text = '', logger: Logger.new($stdout))
m = Model::Model.new logger: logger
def self.new_model(path = '', text = '')
m = Model::Model.new
if path.length.positive?
m.load_model(path)
else
Expand Down Expand Up @@ -291,22 +295,20 @@ def enforce_ex(*rvals)
protected

attr_accessor :model_path, :fm, :auto_motify_watcher
attr_reader :logger

private

attr_accessor :matcher_map
attr_writer :adapter

def init(logger: Logger.new($stdout))
def init
self.rm_map = {}
self.effector = Effect::DefaultEffector.get_effector(model.model['e']['e'].value)

self.enabled = true
self.auto_save = true
self.auto_build_role_links = true

@logger = logger

init_rm_map
end

Expand Down Expand Up @@ -338,18 +340,18 @@ def log_request(rvals, result)
req_str = "Request: #{rvals.map(&:to_s).join ', '} ---> #{result}"

if result
logger.info(req_str)
Logger.info(req_str)
else
# leaving this in error for now, if it's very noise this can be changed to info or debug
logger.error(req_str)
Logger.error(req_str)
end
end

def init_rm_map
return unless model.model.keys.include?('g')

model.model['g'].each_key do |ptype|
rm_map[ptype] = Rbac::DefaultRoleManager::RoleManager.new(10, logger: logger)
rm_map[ptype] = Rbac::DefaultRoleManager::RoleManager.new(10)
end
end
end
Expand Down
17 changes: 17 additions & 0 deletions lib/casbin-ruby/logger.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# frozen_string_literal: true

require 'casbin-ruby/config'

module Casbin
module Logger
module_function

def info(value)
Config.logger.info(value)
Comment thread
jokius marked this conversation as resolved.
end

def error(value)
Config.logger.error(value)
end
end
end
6 changes: 2 additions & 4 deletions lib/casbin-ruby/model/assertion.rb
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
# frozen_string_literal: true

require 'logger'
require 'casbin-ruby/logger'

module Casbin
module Model
class Assertion
attr_accessor :key, :value, :tokens, :policy, :rm
attr_reader :logger

def initialize(hash = {})
@key = hash[:key].to_s
@value = hash[:value].to_s
@tokens = [*hash[:tokens]]
@policy = [*hash[:policy]]
@logger = hash[:logger] || Logger.new($stdout)
end

def build_role_links(rm)
Expand All @@ -24,7 +22,7 @@ def build_role_links(rm)
raise 'grouping policy elements do not meet role definition' if rule.size < count

rm.add_link(*rule)
logger.info("Role links for: #{key}")
Logger.info("Role links for: #{key}")
rm.print_roles
end
end
Expand Down
7 changes: 4 additions & 3 deletions lib/casbin-ruby/model/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
require 'casbin-ruby/model/assertion'
require 'casbin-ruby/config/config'
require 'casbin-ruby/util'
require 'casbin-ruby/logger'

module Casbin
module Model
Expand All @@ -29,19 +30,19 @@ def load_model_from_text(text)
def add_def(sec, key, value)
return false if value == ''

ast = Assertion.new(key: key, value: value, logger: logger)
ast = Assertion.new(key: key, value: value)
%w[r p].include?(sec) ? ast_tokens_set(ast, key) : model_sec_set(ast)

model[sec] ||= {}
model[sec][key] = ast
end

def print_model
logger.info 'Model:'
Logger.info 'Model:'

model.each do |k, v|
v.each do |i, j|
logger.info "#{k}.#{i}: #{j.value}"
Logger.info "#{k}.#{i}: #{j.value}"
end
end
end
Expand Down
11 changes: 5 additions & 6 deletions lib/casbin-ruby/model/policy.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
# frozen_string_literal: true

require 'logger'
require 'casbin-ruby/logger'

module Casbin
module Model
class Policy
attr_reader :model, :logger
attr_reader :model

def initialize(logger: Logger.new($stdout))
def initialize
@model = {}
@logger = logger
end

# initializes the roles in RBAC.
Expand All @@ -24,13 +23,13 @@ def build_role_links(rm_map)

# Log using info
def print_policy
logger.info 'Policy:'
Logger.info 'Policy:'

%w[p g].each do |sec|
next unless model.key? sec

model[sec].each do |key, ast|
logger.info "#{key} : #{ast.value} : #{ast.policy}"
Logger.info "#{key} : #{ast.value} : #{ast.policy}"
end
end
end
Expand Down
8 changes: 3 additions & 5 deletions lib/casbin-ruby/rbac/default_role_manager/role_manager.rb
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
# frozen_string_literal: true

require 'logger'
require 'casbin-ruby/rbac/role_manager'
require 'casbin-ruby/rbac/default_role_manager/role'
require 'casbin-ruby/logger'

module Casbin
module Rbac
module DefaultRoleManager
# provides a default implementation for the RoleManager interface
class RoleManager < Rbac::RoleManager
attr_accessor :all_roles, :max_hierarchy_level, :matching_func, :has_domain_pattern, :domain_matching_func
attr_reader :logger

def initialize(max_hierarchy_level, logger: Logger.new($stdout))
def initialize(max_hierarchy_level)
super()
@logger = logger
@all_roles = {}
@max_hierarchy_level = max_hierarchy_level
end
Expand Down Expand Up @@ -120,7 +118,7 @@ def get_users(name, *domain)

def print_roles
line = all_roles.map { |_key, role| role.to_string }.compact
logger.info(line.join(', '))
Logger.info(line.join(', '))
end

private
Expand Down
2 changes: 1 addition & 1 deletion lib/casbin-ruby/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module Casbin
VERSION = '1.0.10'
VERSION = '1.1.0'
end