22 lines
748 B
Ruby
22 lines
748 B
Ruby
|
module ChecksCollaboration
|
||
|
def can_collaborate_with_project?(project, ref: nil)
|
||
|
return true if can?(current_user, :push_code, project)
|
||
|
|
||
|
can_create_merge_request =
|
||
|
can?(current_user, :create_merge_request_in, project) &&
|
||
|
current_user.already_forked?(project)
|
||
|
|
||
|
can_create_merge_request ||
|
||
|
user_access(project).can_push_to_branch?(ref)
|
||
|
end
|
||
|
|
||
|
# rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||
|
# enabling this so we can easily cache the user access value as it might be
|
||
|
# used across multiple calls in the view
|
||
|
def user_access(project)
|
||
|
@user_access ||= {}
|
||
|
@user_access[project] ||= Gitlab::UserAccess.new(current_user, project: project)
|
||
|
end
|
||
|
# rubocop:enable Gitlab/ModuleWithInstanceVariables
|
||
|
end
|