Merge branch 'master' of git.curoverse.com:arvados into 11876-r-sdk
[arvados.git] / services / api / app / models / arvados_model.rb
index f6e914d7bdc8e34fee818232a297a087850f065e..08d7e9345dbb8178d6891821277e6a01958aeacd 100644 (file)
@@ -263,38 +263,28 @@ class ArvadosModel < ActiveRecord::Base
     if users_list.select { |u| u.is_admin }.any?
       if !include_trash
         # exclude rows that are explicitly trashed.
-        if self.column_names.include? "owner_uuid"
+        if sql_table != "api_client_authorizations"
           sql_conds.push "NOT EXISTS(SELECT 1
-                  FROM permission_view
+                  FROM #{PERMISSION_VIEW}
                   WHERE trashed = 1 AND
                   (#{sql_table}.uuid = target_uuid OR #{sql_table}.owner_uuid = target_uuid))"
-        else
-          sql_conds.push "NOT EXISTS(SELECT 1
-                  FROM permission_view
-                  WHERE trashed = 1 AND
-                  (#{sql_table}.uuid = target_uuid))"
         end
       end
     else
-      # Can read object (evidently a group or user) whose UUID is listed
-      # explicitly in user_uuids.
-      sql_conds.push "#{sql_table}.uuid IN (:user_uuids)"
-
       if include_trash
-        trashed_check = "true"
+        trashed_check = ""
       else
-        trashed_check = "trashed = 0"
+        trashed_check = "AND trashed = 0"
       end
 
-      if self.column_names.include? "owner_uuid" and sql_table != "groups"
+      if sql_table != "api_client_authorizations" and sql_table != "groups"
         owner_check = "OR (target_uuid = #{sql_table}.owner_uuid AND target_owner_uuid IS NOT NULL)"
-        sql_conds.push "#{sql_table}.owner_uuid IN (:user_uuids)"
       else
         owner_check = ""
       end
 
-      sql_conds.push "EXISTS(SELECT 1 FROM permission_view "+
-                     "WHERE user_uuid IN (:user_uuids) AND perm_level >= 1 AND #{trashed_check} AND (target_uuid = #{sql_table}.uuid #{owner_check}))"
+      sql_conds.push "EXISTS(SELECT 1 FROM #{PERMISSION_VIEW} "+
+                     "WHERE user_uuid IN (:user_uuids) AND perm_level >= 1 #{trashed_check} AND (target_uuid = #{sql_table}.uuid #{owner_check}))"
 
       if sql_table == "links"
         # Match any permission link that gives one of the authorized
@@ -305,7 +295,6 @@ class ArvadosModel < ActiveRecord::Base
       end
     end
 
-    User.fresh_permission_view
     query_on.where(sql_conds.join(' OR '),
                     user_uuids: user_uuids,
                     permission_link_classes: ['permission', 'resources'])
@@ -368,13 +357,14 @@ class ArvadosModel < ActiveRecord::Base
 
   def self.full_text_searchable_columns
     self.columns.select do |col|
-      col.type == :string or col.type == :text
+      [:string, :text, :jsonb].include?(col.type)
     end.map(&:name)
   end
 
   def self.full_text_tsvector
     parts = full_text_searchable_columns.collect do |column|
-      "coalesce(#{column},'')"
+      cast = serialized_attributes[column] ? '::text' : ''
+      "coalesce(#{column}#{cast},'')"
     end
     "to_tsvector('english', #{parts.join(" || ' ' || ")})"
   end