projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
2762: When deleting an object, delete permissions and fail if other
[arvados.git]
/
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 2bf1376d6d82f25297c786c49ff8edaafac739bb..4faa0d041ffa28d3497a085d01285ab8ca6906df 100644
(file)
--- 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_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
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.
# 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
class PermissionDeniedError < StandardError
def http_status
@@
-237,6
+236,11
@@
class ArvadosModel < ActiveRecord::Base
return true
end
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
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?
def maybe_update_modified_by_fields
update_modified_by_fields if self.changed? or self.new_record?
+ true
end
def update_modified_by_fields
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
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
end
def ensure_serialized_attribute_type