class Conjur::Policy::IdSubstitutionResolver

Makes all ids absolute, by prepending the namespace (if any) and the enclosing policy (if any).

Public Instance Methods

resolve_field(record, visited) click to toggle source
# File lib/conjur/policy/resolver.rb, line 98
def resolve_field record, visited
  if record.respond_to?(:id) && record.respond_to?(:id=)
    id = record.id
    if id.blank?
      raise "#{record.class.simple_name} has no id" unless namespace
      id = namespace
    elsif id[0] == '/'
      id = id[1..-1]
    else
      if record.respond_to?(:resource_kind) && record.resource_kind == "user"
        id = [ id, user_namespace ].compact.join('@')
      else
        id = [ namespace, id ].compact.join('/')
      end
    end

    substitute! id
    
    record.id = id
  end
  
  traverse record.referenced_records, visited, method(:resolve_field), method(:on_resolve_policy)
end

Protected Instance Methods

user_namespace() click to toggle source
# File lib/conjur/policy/resolver.rb, line 124
def user_namespace
  namespace.gsub('/', '-') if namespace
end