projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
16007: Remember to set trash_at in trashed_groups.
[arvados.git]
/
services
/
api
/
app
/
models
/
link.rb
diff --git
a/services/api/app/models/link.rb
b/services/api/app/models/link.rb
index 649a6f80c281fc83f2d6eaf4b0fc80fe82c28ce6..ad7800fe679cb91936bde76f00566873cb369419 100644
(file)
--- a/
services/api/app/models/link.rb
+++ b/
services/api/app/models/link.rb
@@
-1,8
+1,16
@@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
class Link < ArvadosModel
include HasUuid
include KindAndEtag
include CommonApiTemplate
class Link < ArvadosModel
include HasUuid
include KindAndEtag
include CommonApiTemplate
- serialize :properties, Hash
+
+ # Posgresql JSONB columns should NOT be declared as serialized, Rails 5
+ # already know how to properly treat them.
+ attribute :properties, :jsonbHash, default: {}
+
before_create :permission_to_attach_to_objects
before_update :permission_to_attach_to_objects
after_update :maybe_invalidate_permissions_cache
before_create :permission_to_attach_to_objects
before_update :permission_to_attach_to_objects
after_update :maybe_invalidate_permissions_cache
@@
-20,11
+28,6
@@
class Link < ArvadosModel
t.add :properties
end
t.add :properties
end
- def properties
- @properties ||= Hash.new
- super
- end
-
def head_kind
if k = ArvadosModel::resource_class_for_uuid(head_uuid)
k.kind
def head_kind
if k = ArvadosModel::resource_class_for_uuid(head_uuid)
k.kind
@@
-49,8
+52,12
@@
class Link < ArvadosModel
# Administrators can grant permissions
return true if current_user.is_admin
# Administrators can grant permissions
return true if current_user.is_admin
- # All users can grant permissions on objects they own or can manage
head_obj = ArvadosModel.find_by_uuid(head_uuid)
head_obj = ArvadosModel.find_by_uuid(head_uuid)
+
+ # No permission links can be pointed to past collection versions
+ return false if head_obj.is_a?(Collection) && head_obj.current_version_uuid != head_uuid
+
+ # All users can grant permissions on objects they own or can manage
return true if current_user.can?(manage: head_obj)
# Default = deny.
return true if current_user.can?(manage: head_obj)
# Default = deny.
@@
-65,7
+72,7
@@
class Link < ArvadosModel
# permissions for head_uuid and tail_uuid, and invalidate the
# cache for only those users. (This would require a browseable
# cache.)
# permissions for head_uuid and tail_uuid, and invalidate the
# cache for only those users. (This would require a browseable
# cache.)
- User.invalidate_permissions_cache
db_current_time.to_i
+ User.invalidate_permissions_cache
end
end
end
end
@@
-95,5
+102,4
@@
class Link < ArvadosModel
super
end
end
super
end
end
-
end
end