X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7871e324112f24527031f4100e4131ff2c6ab245..cf32ef421c037692e7ae896f695c61d8e3670f01:/services/api/app/models/arvados_model.rb diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb index 4e707b72e4..4faa0d041f 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -14,7 +14,6 @@ class ArvadosModel < ActiveRecord::Base before_save :ensure_ownership_path_leads_to_user before_destroy :ensure_owner_uuid_is_permitted before_destroy :ensure_permission_to_destroy - before_create :update_modified_by_fields before_update :maybe_update_modified_by_fields after_create :log_create @@ -27,7 +26,7 @@ class ArvadosModel < ActiveRecord::Base # Note: This only returns permission links. It does not account for # permissions obtained via user.is_admin or # user.uuid==object.owner_uuid. - has_many :permissions, :foreign_key => :head_uuid, :class_name => 'Link', :primary_key => :uuid, :conditions => "link_class = 'permission'" + has_many :permissions, :foreign_key => :head_uuid, :class_name => 'Link', :primary_key => :uuid, :conditions => "link_class = 'permission'", dependent: :destroy class PermissionDeniedError < StandardError def http_status @@ -186,7 +185,7 @@ class ArvadosModel < ActiveRecord::Base end def ensure_owner_uuid_is_permitted - return false if !current_user + raise PermissionDeniedError if !current_user self.owner_uuid ||= current_user.uuid if self.owner_uuid_changed? if current_user.uuid == self.owner_uuid or @@ -237,6 +236,11 @@ class ArvadosModel < ActiveRecord::Base return true end + def destroy_permission_links + Link.destroy_all(['link_class=? and (head_uuid=? or tail_uuid=?)', + 'permission', uuid, uuid]) + end + def ensure_permission_to_destroy raise PermissionDeniedError unless permission_to_destroy end @@ -247,6 +251,7 @@ class ArvadosModel < ActiveRecord::Base def maybe_update_modified_by_fields update_modified_by_fields if self.changed? or self.new_record? + true end def update_modified_by_fields @@ -255,6 +260,7 @@ class ArvadosModel < ActiveRecord::Base self.modified_at = Time.now self.modified_by_user_uuid = current_user ? current_user.uuid : nil self.modified_by_client_uuid = current_api_client ? current_api_client.uuid : nil + true end def ensure_serialized_attribute_type