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
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

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