X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a9b15a2f041744c8fac8c0b12fa8b61d1a7292f8..f15c51d123da2db1deeeb0e76685cf17eb56e039:/services/api/app/models/container.rb diff --git a/services/api/app/models/container.rb b/services/api/app/models/container.rb index f72ca4dcf9..83765fb1dc 100644 --- a/services/api/app/models/container.rb +++ b/services/api/app/models/container.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'log_reuse_info' require 'whitelist_update' require 'safe_json' @@ -293,17 +297,13 @@ class Container < ArvadosModel end def self.readable_by(*users_list) - if users_list.select { |u| u.is_admin }.any? - return self + # Load optional keyword arguments, if they exist. + if users_list.last.is_a? Hash + kwargs = users_list.pop + else + kwargs = {} end - user_uuids = users_list.map { |u| u.uuid } - uuid_list = user_uuids + users_list.flat_map { |u| u.groups_i_can(:read) } - uuid_list.uniq! - permitted = "(SELECT head_uuid FROM links WHERE link_class='permission' AND tail_uuid IN (:uuids))" - joins(:container_requests). - where("container_requests.uuid IN #{permitted} OR "+ - "container_requests.owner_uuid IN (:uuids)", - uuids: uuid_list) + Container.where(ContainerRequest.readable_by(*users_list).where("containers.uuid = container_requests.container_uuid").exists) end def final? @@ -385,7 +385,7 @@ class Container < ArvadosModel when Running permitted.push :finished_at, :output, :log when Queued, Locked - permitted.push :finished_at + permitted.push :finished_at, :log end else