class Casbin::Model::Policy
Attributes
model[R]
Public Class Methods
new()
click to toggle source
# File lib/casbin-ruby/model/policy.rb, line 10 def initialize @model = {} end
Public Instance Methods
add_policies(sec, ptype, rules)
click to toggle source
adds policy rules to the model.
# File lib/casbin-ruby/model/policy.rb, line 58 def add_policies(sec, ptype, rules) rules.each do |rule| return false if has_policy(sec, ptype, rule) end model[sec][ptype].policy += rules true end
add_policy(sec, ptype, rule)
click to toggle source
adds a policy rule to the model.
# File lib/casbin-ruby/model/policy.rb, line 49 def add_policy(sec, ptype, rule) return false if has_policy(sec, ptype, rule) model[sec][ptype].policy << rule true end
build_role_links(rm_map)
click to toggle source
initializes the roles in RBAC.
# File lib/casbin-ruby/model/policy.rb, line 15 def build_role_links(rm_map) return unless model.key? 'g' model['g'].each do |ptype, ast| rm = rm_map[ptype] ast.build_role_links(rm) end end
clear_policy()
click to toggle source
clears all current policy.
# File lib/casbin-ruby/model/policy.rb, line 38 def clear_policy %w[p g].each do |sec| next unless model.key? sec model[sec].each do |key, _ast| model[sec][key].policy = [] end end end
get_filtered_policy(sec, ptype, field_index, *field_values)
click to toggle source
gets rules based on field filters from a policy.
# File lib/casbin-ruby/model/policy.rb, line 115 def get_filtered_policy(sec, ptype, field_index, *field_values) model[sec][ptype].policy.select do |rule| field_values.select { |value| rule[field_index] == value }.any? end.compact end
get_policy(sec, ptype)
click to toggle source
gets all rules in a policy.
# File lib/casbin-ruby/model/policy.rb, line 85 def get_policy(sec, ptype) model[sec][ptype].policy end
get_values_for_field_in_policy(sec, ptype, field_index)
click to toggle source
gets all values for a field for all rules in a policy, duplicated values are removed.
# File lib/casbin-ruby/model/policy.rb, line 136 def get_values_for_field_in_policy(sec, ptype, field_index) values = [] return values unless model.keys.include?(sec) return values unless model[sec].include?(ptype) model[sec][ptype].policy.each do |rule| value = rule[field_index] values << value if values.include?(value) end values end
has_policy(sec, ptype, rule)
click to toggle source
determines whether a model has the specified policy rule.
# File lib/casbin-ruby/model/policy.rb, line 90 def has_policy(sec, ptype, rule) model.key?(sec) && model[sec].key?(ptype) && model[sec][ptype].policy.include?(rule) end
print_policy()
click to toggle source
Log using info
# File lib/casbin-ruby/model/policy.rb, line 25 def print_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}" end end end
remove_filtered_policy(sec, ptype, field_index, *field_values)
click to toggle source
removes policy rules based on field filters from the model.
# File lib/casbin-ruby/model/policy.rb, line 122 def remove_filtered_policy(sec, ptype, field_index, *field_values) return false unless model.key?(sec) return false unless model[sec].include?(ptype) state = { tmp: [], res: false } model[sec][ptype].policy.each do |rule| state = filtered_rule(state, rule, field_values, field_index) end model[sec][ptype].policy = state[:tmp] state[:res] end
remove_policies(sec, ptype, rules)
click to toggle source
removes policy rules from the model.
# File lib/casbin-ruby/model/policy.rb, line 104 def remove_policies(sec, ptype, rules) rules.each do |rule| return false unless has_policy(sec, ptype, rule) end model[sec][ptype].policy.reject! { |rule| rules.include? rule } true end
remove_policy(sec, ptype, rule)
click to toggle source
removes a policy rule from the model.
# File lib/casbin-ruby/model/policy.rb, line 95 def remove_policy(sec, ptype, rule) return false unless has_policy(sec, ptype, rule) model[sec][ptype].policy.delete(rule) true end
update_policies(sec, ptype, old_rules, new_rules)
click to toggle source
update policy rules from the model.
# File lib/casbin-ruby/model/policy.rb, line 76 def update_policies(sec, ptype, old_rules, new_rules) old_rules.each do |rule| return false unless has_policy(sec, ptype, rule) end remove_policies(sec, ptype, old_rules) && add_policies(sec, ptype, new_rules) end
update_policy(sec, ptype, old_rule, new_rule)
click to toggle source
update a policy rule from the model.
# File lib/casbin-ruby/model/policy.rb, line 69 def update_policy(sec, ptype, old_rule, new_rule) return false unless has_policy(sec, ptype, old_rule) remove_policy(sec, ptype, old_rule) && add_policy(sec, ptype, new_rule) end
Private Instance Methods
filtered_rule(state, rule, field_values, field_index)
click to toggle source
# File lib/casbin-ruby/model/policy.rb, line 151 def filtered_rule(state, rule, field_values, field_index) field_values.each_with_index do |field_value, index| if field_value == '' || rule[field_index + index] == field_value state[:res] = true else state[:tmp] << rule end end state end