module PrivatePerson::ActsAsPermitted::InstanceMethods

Public Instance Methods

is_permitted?(permissor, permissible) click to toggle source
# File lib/private_person/extensions/acts_as_permitted.rb, line 13
def is_permitted?(permissor, permissible)
  if permissible.nil?
    raise 'Called is_permitted? on nil. Does not compute. Preparing to self destruct.'
  end
  unless PrivatePerson::Permission.by_permissible(permissible).blocked.empty?
    return false
  end
  wildcards = permissions_by(permissor).by_wildcard(permissible.class.name).legitimate
  if wildcards.present?
    return true
  end
  permissions = permissions_by(permissor).by_permissible(permissible).legitimate
  if permissions.present?
    return true
  end
  return false
end
permissions_by(permissor) click to toggle source
# File lib/private_person/extensions/acts_as_permitted.rb, line 31
def permissions_by(permissor)
  PrivatePerson::Permission.by_permissor(permissor).by_relationship_type(relationship_to(permissor))
end
relationship_to(permissor) click to toggle source
# File lib/private_person/extensions/acts_as_permitted.rb, line 35
def relationship_to(permissor)
  # First make sure we're not a new user
  if self.new_record?
    return 'public'
  end
  # Next check for an efficient method
  for relationship_method in permissor.class.of
    is_method = ('is_' + relationship_method.to_s.singularize + '_of?').to_sym
    if respond_to?(is_method) and self.send(is_method, permissor)
      return relationship_method.to_s
    end
  end
  # Then check for a slow method
  for relationship_method in permissor.class.of
    relationship_members = permissor.send(relationship_method.to_sym)
    if relationship_members.present? and relationship_members.include? self
      return relationship_method.to_s
    end
  end
  return 'public'
end