X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2bbc9d8d58245b2f6879688d71369c39f26f2e1f..267c1a22e4b9e04ed29d1360f4e7ea6519845d12:/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 94c2cc52fa..08d7e9345d 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -265,31 +265,26 @@ class ArvadosModel < ActiveRecord::Base # exclude rows that are explicitly trashed. 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))" 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 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 @@ -300,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']) @@ -363,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