X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/6ed994e7192ccb67a0c0412ec5c7162ca6fbd56f..53b609a8946c1cd2b38162e530ae323f3264838c:/app/models/orvos_model.rb diff --git a/app/models/orvos_model.rb b/app/models/orvos_model.rb index 247ff50fc8..fb799dc718 100644 --- a/app/models/orvos_model.rb +++ b/app/models/orvos_model.rb @@ -1,6 +1,18 @@ class OrvosModel < ActiveRecord::Base self.abstract_class = true + include CurrentApiClient # current_user, current_api_client, etc. + + attr_protected :created_by_user + attr_protected :created_by_client + attr_protected :created_at + attr_protected :modified_by_user + attr_protected :modified_by_client + attr_protected :modified_at + before_create :initialize_created_by_fields + before_update :permission_to_update + before_update :update_modified_by_fields + def self.kind_class(kind) kind.match(/^orvos\#(.+?)(_list|List)?$/)[1].pluralize.classify.constantize rescue nil end @@ -17,4 +29,34 @@ class OrvosModel < ActiveRecord::Base end end end + + protected + + def permission_to_update + return false unless current_user + self.created_by_user == current_user.uuid or + current_user.is_admin or + current_user.uuid == self.uuid or + Metadatum.where(metadata_class: 'permission', + name: 'can_write', + tail: self.uuid, + head: current_user.uuid).count > 0 + end + + def update_modified_by_fields + if self.changed? + self.modified_at = Time.now + self.modified_by_user = current_user.uuid + self.modified_by_client = current_api_client.uuid + end + end + + def initialize_created_by_fields + self.created_at = Time.now + self.created_by_user = current_user.uuid + self.created_by_client = current_api_client.uuid + self.modified_at = Time.now + self.modified_by_user = current_user.uuid + self.modified_by_client = current_api_client.uuid + end end