X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b22ff6242148a9b37baef6c74701fa85a8765adf..45691d6448490cf637c2d9ef5ebc68ccd92b9230:/services/api/app/models/container.rb diff --git a/services/api/app/models/container.rb b/services/api/app/models/container.rb index f72ca4dcf9..0aeca6db82 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?