Module: HasUserType

Extended by:
ActiveSupport::Concern
Included in:
User
Defined in:
app/models/concerns/has_user_type.rb

Constant Summary collapse

USER_TYPES =
{
  human: 0,
  support_bot: 1,
  alert_bot: 2,
  visual_review_bot: 3,
  service_user: 4,
  ghost: 5,
  project_bot: 6,
  migration_bot: 7,
  security_bot: 8,
  automation_bot: 9,
  security_policy_bot: 10,
  admin_bot: 11,
  suggested_reviewers_bot: 12,
  service_account: 13,
  llm_bot: 14
}.with_indifferent_access.freeze
BOT_USER_TYPES =
%w[
  alert_bot
  project_bot
  support_bot
  visual_review_bot
  migration_bot
  security_bot
  automation_bot
  security_policy_bot
  admin_bot
  suggested_reviewers_bot
  service_account
  llm_bot
].freeze
NON_INTERNAL_USER_TYPES =

‘service_account` allows instance/namespaces to configure a user for external integrations/automations `service_user` is an internal, `gitlab-com`-specific user type for integrations like suggested reviewers

%w[human project_bot service_user service_account].freeze
INTERNAL_USER_TYPES =
(USER_TYPES.keys - NON_INTERNAL_USER_TYPES).freeze

Instance Method Summary collapse

Instance Method Details

#bot?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'app/models/concerns/has_user_type.rb', line 57

def bot?
  BOT_USER_TYPES.include?(user_type)
end

#internal?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'app/models/concerns/has_user_type.rb', line 61

def internal?
  INTERNAL_USER_TYPES.include?(user_type)
end

#redacted_name(viewing_user) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/models/concerns/has_user_type.rb', line 65

def redacted_name(viewing_user)
  return self.name unless self.project_bot?

  return self.name if self.groups.any? && viewing_user&.can?(:read_group, self.groups.first)

  return self.name if viewing_user&.can?(:read_project, self.projects.first)

  # If the requester does not have permission to read the project bot name,
  # the API returns an arbitrary string. UI changes will be addressed in a follow up issue:
  # https://gitlab.com/gitlab-org/gitlab/-/issues/346058
  '****'
end

#resource_bot_ownersObject



84
85
86
87
88
89
90
91
92
93
# File 'app/models/concerns/has_user_type.rb', line 84

def resource_bot_owners
  return [] unless project_bot?

  resource = resource_bot_resource
  return [] unless resource

  return resource.maintainers if resource.is_a?(Project)

  resource.owners
end

#resource_bot_resourceObject



78
79
80
81
82
# File 'app/models/concerns/has_user_type.rb', line 78

def resource_bot_resource
  return unless project_bot?

  projects&.first || groups&.first
end