X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/19ae770973482257117fe8ded5619c3018c4b60f..9f487917d8c2aa3958473dd1c11dc584485c1229:/services/api/lib/whitelist_update.rb diff --git a/services/api/lib/whitelist_update.rb b/services/api/lib/whitelist_update.rb index a81f9924f0..17aed4b48d 100644 --- a/services/api/lib/whitelist_update.rb +++ b/services/api/lib/whitelist_update.rb @@ -1,16 +1,31 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + module WhitelistUpdate def check_update_whitelist permitted_fields attribute_names.each do |field| - if not permitted_fields.include? field.to_sym and self.send((field.to_s + "_changed?").to_sym) - errors.add field, "illegal update of field" + if !permitted_fields.include?(field.to_sym) && really_changed(field) + errors.add field, "cannot be modified in state '#{self.state}' (#{send(field+"_was").inspect}, #{send(field).inspect})" end end end + def really_changed(attr) + return false if !send(attr+"_changed?") + old = send(attr+"_was") + new = send(attr) + if (old.nil? || old == [] || old == {}) && (new.nil? || new == [] || new == {}) + false + else + old != new + end + end + def validate_state_change if self.state_changed? unless state_transitions[self.state_was].andand.include? self.state - errors.add :state, "invalid state change from #{self.state_was} to #{self.state}" + errors.add :state, "cannot change from #{self.state_was} to #{self.state}" return false end end