Sha256: 6658c2a63dcaf34ab1a58128a49cec2d37dd316899834806d34342822a719538

Contents?: true

Size: 1.63 KB

Versions: 211

Compression:

Stored size: 1.63 KB

Contents

require 'active_support/core_ext/module/delegation'

module ActiveModel
  module MassAssignmentSecurity
    class Sanitizer
      def initialize(target=nil)
      end

      # Returns all attributes not denied by the authorizer.
      def sanitize(attributes, authorizer)
        sanitized_attributes = attributes.reject { |key, value| authorizer.deny?(key) }
        debug_protected_attribute_removal(attributes, sanitized_attributes)
        sanitized_attributes
      end

    protected

      def debug_protected_attribute_removal(attributes, sanitized_attributes)
        removed_keys = attributes.keys - sanitized_attributes.keys
        process_removed_attributes(removed_keys) if removed_keys.any?
      end

      def process_removed_attributes(attrs)
        raise NotImplementedError, "#process_removed_attributes(attrs) suppose to be overwritten"
      end
    end

    class LoggerSanitizer < Sanitizer
      delegate :logger, :to => :@target

      def initialize(target)
        @target = target
        super
      end

      def logger?
        @target.respond_to?(:logger) && @target.logger
      end

      def process_removed_attributes(attrs)
        logger.debug "WARNING: Can't mass-assign protected attributes: #{attrs.join(', ')}" if logger?
      end
    end

    class StrictSanitizer < Sanitizer
      def process_removed_attributes(attrs)
        return if (attrs - insensitive_attributes).empty?
        raise ActiveModel::MassAssignmentSecurity::Error, "Can't mass-assign protected attributes: #{attrs.join(', ')}"
      end

      def insensitive_attributes
        ['id']
      end
    end

    class Error < StandardError
    end
  end
end

Version data entries

211 entries across 167 versions & 22 rubygems

Version Path
mdg-1.0.1 vendor/bundle/ruby/2.3.0/gems/activemodel-3.2.22.5/lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.22.5 lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.22.4 lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.22.3 lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.22.2 lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.22.1 lib/active_model/mass_assignment_security/sanitizer.rb
classiccms-0.7.5 vendor/bundle/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb
classiccms-0.7.4 vendor/bundle/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb
classiccms-0.7.3 vendor/bundle/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/sanitizer.rb
active_mailer-0.0.10 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/activemodel-3.2.12/lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.22 lib/active_model/mass_assignment_security/sanitizer.rb
judge-2.0.5 vendor/bundle/ruby/2.1.0/gems/activemodel-3.2.12/lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.21 lib/active_model/mass_assignment_security/sanitizer.rb
apl-library-0.0.90 vendor/bundle/ruby/1.9.1/gems/activemodel-3.2.18/lib/active_model/mass_assignment_security/sanitizer.rb
apl-library-0.0.90 vendor/bundle/ruby/2.1.0/gems/apl-library-0.0.90/vendor/bundle/ruby/1.9.1/gems/activemodel-3.2.18/lib/active_model/mass_assignment_security/sanitizer.rb
apl-library-0.0.90 vendor/bundle/ruby/1.8/gems/activemodel-3.2.18/lib/active_model/mass_assignment_security/sanitizer.rb
apl-library-0.0.90 vendor/bundle/ruby/2.1.0/gems/activemodel-3.2.18/lib/active_model/mass_assignment_security/sanitizer.rb
apl-library-0.0.90 vendor/bundle/ruby/2.1.0/gems/apl-library-0.0.90/vendor/bundle/ruby/1.8/gems/activemodel-3.2.18/lib/active_model/mass_assignment_security/sanitizer.rb
apl-library-0.0.90 vendor/bundle/ruby/2.1.0/gems/apl-library-0.0.90/vendor/bundle/ruby/2.1.0/gems/activemodel-3.2.18/lib/active_model/mass_assignment_security/sanitizer.rb
activemodel-3.2.20 lib/active_model/mass_assignment_security/sanitizer.rb