Merge pull request #46453 from skipkayhil/feat-filter-encrypted-attributes-inspect

Add filtering of encrypted attributes in #inspect
This commit is contained in:
Jonathan Hefner 2022-11-12 15:57:04 -06:00 committed by GitHub
commit 90cba59ddd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 5 deletions

View File

@ -1,3 +1,13 @@
* Add automatic filtering of encrypted attributes on inspect
This feature is enabled by default but can be disabled with
```ruby
config.active_record.encryption.add_to_filter_parameters = false
```
*Hartley McGuire*
* Clear locking column on #dup
This change fixes not to duplicate locking_column like id and timestamps.

View File

@ -51,7 +51,10 @@ module ActiveRecord
def install_auto_filtered_parameters_hook(application) # :nodoc:
ActiveRecord::Encryption.on_encrypted_attribute_declared do |klass, encrypted_attribute_name|
filter_parameter = [("#{klass.model_name.element}" if klass.name), encrypted_attribute_name.to_s].compact.join(".")
application.config.filter_parameters << filter_parameter unless excluded_from_filter_parameters?(filter_parameter)
unless excluded_from_filter_parameters?(filter_parameter)
application.config.filter_parameters << filter_parameter
klass.filter_attributes += [encrypted_attribute_name]
end
end
end

View File

@ -377,10 +377,8 @@ To keep using the current cache store, you can turn off cache versioning entirel
end
# Filtered params
ActiveSupport.on_load(:action_controller, run_once: true) do
if ActiveRecord::Encryption.config.add_to_filter_parameters
ActiveRecord::Encryption.install_auto_filtered_parameters_hook(app)
end
if ActiveRecord::Encryption.config.add_to_filter_parameters
ActiveRecord::Encryption.install_auto_filtered_parameters_hook(app)
end
end

View File

@ -3399,6 +3399,44 @@ module ApplicationTests
assert_equal [ :password, :credit_card_number ], ActiveRecord::Base.filter_attributes
end
test "encrypted attributes are added to record's filter_attributes by default" do
app_file "app/models/post.rb", <<-RUBY
class Post < ActiveRecord::Base
encrypts :content
end
RUBY
add_to_config <<-RUBY
config.enable_reloading = false
config.eager_load = true
RUBY
app "production"
assert_includes Post.filter_attributes, :content
assert_not_includes ActiveRecord::Base.filter_attributes, :content
end
test "encrypted attributes are not added to record filter_attributes if disabled" do
app_file "app/models/post.rb", <<-RUBY
class Post < ActiveRecord::Base
encrypts :content
end
RUBY
add_to_config <<-RUBY
config.enable_reloading = false
config.eager_load = true
config.active_record.encryption.add_to_filter_parameters = false
RUBY
app "production"
assert_not_includes Post.filter_attributes, :content
assert_not_includes ActiveRecord::Base.filter_attributes, :content
end
test "ActiveStorage.routes_prefix can be configured via config.active_storage.routes_prefix" do
app_file "config/environments/development.rb", <<-RUBY
Rails.application.configure do