63 lines
1.2 KiB
Ruby
63 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
class UserAccessSnippet < UserAccess
|
|
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
|
|
|
|
attr_reader :snippet
|
|
|
|
def initialize(user, snippet: nil)
|
|
@user = user
|
|
@snippet = 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?
|
|
|
|
super
|
|
|
|
return false unless snippet
|
|
return false unless can_do_action?(:update_snippet)
|
|
|
|
true
|
|
end
|
|
|
|
def can_merge_to_branch?(ref)
|
|
false
|
|
end
|
|
|
|
def snippet_migration?
|
|
user&.migration_bot? && snippet
|
|
end
|
|
end
|
|
end
|