blob: 93c4432b7dbe40329c159adbdf47e9fb7969a537 (
plain) (
tree)
|
|
module ActiveModel
module MassAssignmentSecurity
class Sanitizer
# Returns all attributes not denied by the authorizer.
def sanitize(attributes, authorizer)
attributes.reject do |attr, value|
if authorizer.deny?(attr)
process_removed_attribute(attr)
true
end
end
end
protected
def process_removed_attribute(attr)
raise NotImplementedError, "#process_removed_attribute(attr) suppose to be overwritten"
end
end
class LoggerSanitizer < Sanitizer
def initialize(target)
@target = target
super()
end
def logger
@target.logger
end
def logger?
@target.respond_to?(:logger) && @target.logger
end
def process_removed_attribute(attr)
logger.warn "Can't mass-assign protected attribute: #{attr}" if logger?
end
end
class StrictSanitizer < Sanitizer
def initialize(target = nil)
super()
end
def process_removed_attribute(attr)
return if insensitive_attributes.include?(attr)
raise ActiveModel::MassAssignmentSecurity::Error.new(attr)
end
def insensitive_attributes
@insensitive_attributes ||= ['id']
end
end
class Error < StandardError
def initialize(attr)
super("Can't mass-assign protected attribute: #{attr}")
end
end
end
end
|