Skip to content

Commit c7caaf7

Browse files
authored
Merge pull request #1105 from ElixirTeSS/field-lock-aliases
Protect locked fields from multiple methods of assignment
2 parents d79334c + c62446d commit c7caaf7

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

app/controllers/concerns/field_lock_enforcement.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ def filter_locked_fields
1212
resource = instance_variable_get("@#{resource_type}")
1313

1414
params[resource_type].delete(:locked_fields)
15-
16-
resource.locked_fields.each do |field|
17-
params[resource_type].delete(field)
18-
end
15+
FieldLock.strip_locked_fields(params[resource_type], resource.locked_fields)
1916
end
2017
end

app/models/field_lock.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,16 @@ class FieldLock < ApplicationRecord
33
belongs_to :resource, polymorphic: true
44
validates :field, presence: true
55

6+
ALIASES = {
7+
node_ids: [:node_names]
8+
}.freeze
9+
10+
def self.strip_locked_fields(params, locked_fields)
11+
locked_fields.each do |field|
12+
params.delete(field)
13+
ALIASES[field]&.each do |field_alias|
14+
params.delete(field_alias)
15+
end
16+
end
17+
end
618
end

lib/ingestors/ingestor.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,10 @@ def find_existing(type, resource)
181181

182182
def update_resource(existing_resource, fields)
183183
# overwrite unlocked attributes
184-
locked_fields = existing_resource.locked_fields
184+
FieldLock.strip_locked_fields(fields, existing_resource.locked_fields)
185185

186186
fields.except(:content_provider_id, :user_id).each do |attr, value|
187-
existing_resource.send("#{attr}=", value) unless locked_fields.include?(attr)
187+
existing_resource.send("#{attr}=", value)
188188
end
189189

190190
existing_resource

test/models/field_lock_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,15 @@ class FieldLockTest < ActiveSupport::TestCase
2929
end
3030
end
3131

32+
test 'strips aliased fields' do
33+
event = events(:one)
34+
35+
event.locked_fields = [:title, :node_ids]
36+
37+
params = { event: { title: 'Something', description: 'Something else', node_names: ['One', 'Two'] } }.with_indifferent_access
38+
FieldLock.strip_locked_fields(params[:event], event.locked_fields)
39+
assert_equal({ description: 'Something else' }.with_indifferent_access, params[:event])
40+
41+
end
42+
3243
end

0 commit comments

Comments
 (0)