Spec-Zone.ru › Ruby on Rails 7.0

модуль ActiveRecord::Encryption::ExtendedDeterministicQueries

Автоматически расширяет зашифрованные аргументы для поддержки запросов как к зашифрованным, так и к незашифрованным данным

Active Record Encryption поддерживает запросы к базе данных с использованием детерминированных атрибутов. Например:

Contact.find_by(email_address: "jorge@hey.com")

Значение «jorge@hey.com» будет автоматически зашифровано для выполнения запроса. Но есть проблема, когда данные шифруются. Это не сработает. В это время эти запросы должны быть:

Contact.find_by(email_address: [ "jorge@hey.com", "<encrypted jorge@hey.com>" ])

Это исправляет ActiveRecord, чтобы автоматически поддерживать это. Это решает обе проблемы:

  • ActiveRecord::Base: используется в +Contact.find_by_email_address(…)+

  • ActiveRecord::Relation: используется в +Contact.internal.find_by_email_address(…)+

ActiveRecord::Base полагается на ActiveRecord::Relation (ActiveRecord::QueryMethods), но кэширует некоторые подготовленные запросы. Вот почему нам нужно перехватить ActiveRecord::Base как только он будет вызван (чтобы соответствующий подготовленный запрос был кэширован).

При изменении этого файла выполняйте тесты производительности в test/performance/extended_deterministic_queries_performance_test.rb для

make sure performance overhead is acceptable.

В будущих итерациях мы расширим это, чтобы поддерживать предыдущие версии «контекста шифрования»

@TODO Экспериментальная функция. Поддержка всех типов запросов ожидается @TODO Он не должен ничего исправлять, если это не нужно (нет предыдущих схем или нет поддержки предыдущих схем шифрования)

Публичные методы класса

install_support() Показать исходный код
# File activerecord/lib/active_record/encryption/extended_deterministic_queries.rb, line 34
def self.install_support
  ActiveRecord::Relation.prepend(RelationQueries)
  ActiveRecord::Base.include(CoreQueries)
  ActiveRecord::Encryption::EncryptedAttributeType.prepend(ExtendedEncryptableType)
  Arel::Nodes::HomogeneousIn.prepend(InWithAdditionalValues)
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API