30 lines
982 B
Ruby
30 lines
982 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Packages
|
||
|
module FinderHelper
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
private
|
||
|
|
||
|
def packages_visible_to_user(user, within_group:)
|
||
|
return ::Packages::Package.none unless within_group
|
||
|
return ::Packages::Package.none unless Ability.allowed?(user, :read_package, within_group)
|
||
|
|
||
|
projects = projects_visible_to_reporters(user, within_group.self_and_descendants.select(:id))
|
||
|
::Packages::Package.for_projects(projects.select(:id))
|
||
|
end
|
||
|
|
||
|
def projects_visible_to_user(user, within_group:)
|
||
|
return ::Project.none unless within_group
|
||
|
return ::Project.none unless Ability.allowed?(user, :read_package, within_group)
|
||
|
|
||
|
projects_visible_to_reporters(user, within_group.self_and_descendants.select(:id))
|
||
|
end
|
||
|
|
||
|
def projects_visible_to_reporters(user, namespace_ids)
|
||
|
::Project.in_namespace(namespace_ids)
|
||
|
.public_or_visible_to_user(user, ::Gitlab::Access::REPORTER)
|
||
|
end
|
||
|
end
|
||
|
end
|