def acts_as_filterable(opts = {})
write_inheritable_attribute(:visibility_default, opts[:visible] || false)
write_inheritable_attribute(:acts_as_filterable, true)
Thread.current[:eval_access_control] = true if Thread.current[:eval_access_control] != false
class_eval do
once('@raccessAliasReadMethods') {
alias :old_read_attribute :read_attribute
}
extend HipstersInc::Acts::Filterable::SingletonMethods
end
include HipstersInc::Acts::Filterable::InstanceMethods
class << self
alias :find_without_access_control :find
def find(*args)
result = nil
ActiveRecord::Base.security_ignore do
result = find_without_access_control(*args)
end
return nil if result.nil?
if result.kind_of?(Array)
return result.collect{|row| row if row.visible? || nil}.compact
else
if result.visible?
return result
else
raise ActiveRecord::RecordNotFound
return nil
end
end
return nil
end
end
end