# File lib/declarative_authorization/authorization.rb, line 653
    def validate? (attr_validator, object = nil, hash_or_attr = nil)
      object ||= attr_validator.object
      hash_or_attr ||= @attr_hash
      return false unless object

      case hash_or_attr
      when Symbol
        attr_value = object_attribute_value(object, hash_or_attr)
        case attr_value
        when nil
          raise NilAttributeValueError, "Attribute #{hash_or_attr.inspect} is nil in #{object.inspect}."
        when Enumerable
          attr_value.any? do |inner_value|
            attr_validator.engine.permit? @privilege, :object => inner_value, :user => attr_validator.user
          end
        else
          attr_validator.engine.permit? @privilege, :object => attr_value, :user => attr_validator.user
        end
      when Hash
        hash_or_attr.all? do |attr, sub_hash|
          attr_value = object_attribute_value(object, attr)
          if attr_value == nil
            raise NilAttributeValueError, "Attribute #{attr.inspect} is nil in #{object.inspect}."
          elsif attr_value.is_a?(Enumerable)
            attr_value.any? do |inner_value|
              validate?(attr_validator, inner_value, sub_hash)
            end
          else
            validate?(attr_validator, attr_value, sub_hash)
          end
        end
      when NilClass
        attr_validator.engine.permit? @privilege, :object => object, :user => attr_validator.user
      else
        raise AuthorizationError, "Wrong conditions hash format: #{hash_or_attr.inspect}"
      end
    end