gitlab-org--gitlab-foss/lib/gitlab/user_access_snippet.rb

63 lines
1.2 KiB
Ruby

# frozen_string_literal: true
module Gitlab
class UserAccessSnippet < UserAccess
extend ::Gitlab::Utils::Override
extend ::Gitlab::Cache::RequestCache
# TODO: apply override check https://gitlab.com/gitlab-org/gitlab/issues/205677
request_cache_key do
[user&.id, snippet&.id]
end
alias_method :snippet, :container
def initialize(user, snippet: nil)
super(user, container: snippet)
@project = snippet&.project
end
def allowed?
return true if snippet_migration?
super
end
def can_do_action?(action)
return true if snippet_migration?
return false unless can_access_git?
permission_cache[action] =
permission_cache.fetch(action) do
Ability.allowed?(user, action, snippet)
end
end
def can_create_tag?(ref)
false
end
def can_delete_branch?(ref)
false
end
def can_push_to_branch?(ref)
return true if snippet_migration?
return false unless snippet
can_do_action?(:update_snippet)
end
def can_merge_to_branch?(ref)
false
end
def snippet_migration?
user&.migration_bot? && snippet
end
override :project
attr_reader :project
end
end