16387: Allow setting is_active=false only on LoginCluster users.
[arvados.git] / services / api / app / models / link.rb
index dc961667b0cd474301c817a3c87c9717ba4424f7..ad7800fe679cb91936bde76f00566873cb369419 100644 (file)
@@ -6,7 +6,11 @@ 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
@@ -48,8 +52,12 @@ class Link < ArvadosModel
     # 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)
+
+    # 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.
@@ -64,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.)
-      User.invalidate_permissions_cache db_current_time.to_i
+      User.invalidate_permissions_cache
     end
   end
 
@@ -94,5 +102,4 @@ class Link < ArvadosModel
       super
     end
   end
-
 end