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
end
end
- User.fresh_permission_view
query_on.where(sql_conds.join(' OR '),
user_uuids: user_uuids,
permission_link_classes: ['permission', 'resources'])
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