控制用户访问

如果您是极狐GitLab 私有化部署实例的管理员,您有多种选项来控制和审核用户访问。

note 这个主题与极狐GitLab 私有化部署实例中的用户管理审核具体相关。与群组相关的信息,可以查看群组文档

等待批准的用户

处于待批准状态的用户需要管理员采取行动。管理员已启用以下任何选项时,用户注册可能处于待批准状态:

  • 新注册需要管理员批准
  • 用户上限
  • 阻止自动创建的用户 (OmniAuth)
  • 阻止自动创建的用户 (LDAP)

当用户在启用此设置的情况下注册账户时:

  • 用户处于待批准状态。
  • 用户会看到一条消息,告诉他们他们的账户正在等待管理员的批准。

待批准的用户:

  • 在功能上与已禁用的用户相同。
  • 无法登录。
  • 无法访问 Git 仓库或极狐GitLab API。
  • 无法收到来自极狐GitLab 的任何通知。
  • 不消耗订阅席位

管理员必须批准他们的注册,系统才能允许他们登录。

查看等待批准的用户注册

  • 通过状态过滤用户的能力引入于极狐GitLab 17.0。

要查看待批准的用户注册:

  1. 在导航栏左侧,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 在搜索框中,通过 State=Pending approval 过滤并点击 Enter

批准或拒绝用户注册

  • 通过状态过滤用户的能力引入于极狐GitLab 17.0。

可以从管理中心批准或拒绝等待批准的用户注册。

要批准或拒绝用户注册:

  1. 在导航栏左侧,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 选择 等待批准 选项卡。
  4. 在搜索框中,通过 State=Pending approval 过滤并点击 Enter
  5. 对于您想批准或拒绝的用户,选择垂直省略号 ( ),然后 审核拒绝

批准用户:

  • 激活了他们的账户。
  • 将用户的状态更改为激活。
  • 消耗订阅席位

拒绝用户:

  • 阻止用户登录或访问实例信息。
  • 删除用户。

查看等待角色晋升的用户

如果打开了管理员审批角色晋升,将现有用户提升到可计费角色的成员资格申请需要管理员批准。

要查看等待角色晋升的用户:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 选择 角色晋升

您就会看到一份所请求的角色等级最高的用户列表。您可以 审批拒绝 请求。

阻塞和取消阻塞用户

极狐GitLab 管理员可以禁用和取消阻塞用户。当您不想让用户访问极狐GitLab 实例却有想要保留他们的数据时,可以禁止此用户。

被阻止的用户:

  • 无法登录或访问任何仓库。
    • 以及与这些仓库中相关联的任何数据。
  • 无法使用 slash 命令
  • 不占用席位

禁用用户

先决条件:

  • 您必须是极狐GitLab 实例的管理员。

您可以阻塞用户访问实例。

要阻塞用户:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 对于您想要阻塞的用户,选择垂直省略号 ( ),然后 阻塞

用户会接收到通知邮件,告知他们的账号已被阻塞。此邮件之后,他们就不会再收到通知。

要举报其他用户的滥用,请参阅举报滥用。在 管理员 区域上查看滥用报告的更多详情,可以查看解决滥用报告

取消阻塞用户

可以在管理中心取消阻塞被阻塞的用户。操作步骤:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 在搜索框中,通过 State=Blocked 过滤并点击 Enter
  4. 对于您想要取消阻塞的用户,选择垂直省略号 ( ),然后 取消阻塞

用户的状态设置为激活,他们消耗席位

note 用户可以使用极狐GitLab API来取消阻塞用户。

LDAP 用户可能无法使用取消禁用选项。要启用取消禁用选项,首先需要删除 LDAP 身份:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 在搜索框中,通过 State=Blocked 过滤并点击 Enter
  4. 选择用户。
  5. 选择 身份 选项卡。
  6. 找到 LDAP provider 并选择删除

激活和停用用户

极狐GitLab 管理员可以停用和激活用户。如果用户近期不再有活动,而且您也不想让他们占用实例的席位,则您应该将他们停用。

被停用的用户:

  • 可以登录极狐GitLab。
    • 如果被停用的用户登录后,他们会自动变为激活状态。
  • 无法访问仓库或 API。
  • 无法使用 slash 命令。更多信息,可以查看slash 命令
  • 不占用席位。更多详情,可以查看付费用户

当您停用用户时,他们的项目、群组和历史会被保留。

停用用户

先决条件:

  • 用户在过去 90 天内没有任何活动。

要想从极狐GitLab 私有化部署实例停用用户:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 对于您想要停用的用户,选择垂直省略号 ( ),然后 停用
  4. 在对话框中,选择 停用

用户账号被停用后,用户会收到邮件通知。在此邮件后,他们就不再会接收到通知。更多详情,查看用户停用邮件

要用极狐GitLab API 停用用户,请参阅停用用户。有关永久限制用户的详情,可以查看阻塞和非阻塞用户

要从 JihuLab.com 订阅中移除用户,查看从您的订阅中移除用户

自动冻结休眠用户

  • 可自定义的时长引入于 15.4 版本。
  • 非活动期的下限设置为 90 天,引入于 15.5 版本。

管理员可以启用自动冻结在过去 90 天内未登录或没有活动的如下用户:

  • 超过一星期前创建,尚未登录。
  • 在指定的时间段内没有活动(默认为 90 天)。

操作步骤:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 展开 账号和限制 部分。
  4. 休眠用户 下,检查 在一段不活跃期之后停用休眠用户
  5. 非活跃之前不活动的天数,输入非活动之前的天数。最小值为 90 天。
  6. 选择 保存更改

启用此功能后,极狐GitLab 每天运行一次作业,冻结休眠用户。

每天最多可以冻结 100,000 个用户。

note 极狐GitLab 生成的机器人不属于自动停用休眠用户的范围。

自动删除未确认的用户

  • 引入于 16.1 版本,功能标志delete_unconfirmed_users_setting。默认禁用。
  • 默认启用于 16.2 版本。

先决条件:

  • 您必须是管理员。

您可以启用自动删除同时满足以下条件的用户:

  • 从未确认过他们的电子邮件地址。
  • 过去注册极狐GitLab 的时间超过指定天数。

您可以使用设置 API,或在 Rails 控制台中配置以下设置:

 Gitlab::CurrentSettings.update(delete_unconfirmed_users: true)
 Gitlab::CurrentSettings.update(unconfirmed_users_delete_after_days: 365)

当启用 delete_unconfirmed_users 设置时,极狐GitLab 每小时运行一次作业来删除未确认的用户。 该作业仅删除过去注册超过 unconfirmed_users_delete_after_days 天的用户。

此作业仅在 email_confirmation_setting 设置为 softhard 时运行。

每天最多可以删除 240,000 个用户。

激活用户

  • 通过状态过滤用户的能力引入于极狐GitLab 17.0。

可以在管理中心激活已冻结的用户。

操作步骤:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 在搜索框中,通过 State=Deactivated 过滤并点击 Enter
  4. 对于您想激活的用户,选择 ( ),然后找到 激活用户

用户的状态设置为激活,他们使用订阅席位

note 一个非激活的用户也可以通过用户界面重新登录来激活他们自己的账户。用户还可以通过极狐GitLab API来激活用户。

封禁和解禁用户

  • 隐藏已封禁用户的合并请求功能引入于 15.8 版本,功能标志hide_merge_requests_from_banned_users。默认禁用。
  • 隐藏已封禁用户的评论功能引入于 15.11 版本,功能标志hidden_notes。默认禁用。
  • 隐藏已封禁用户的项目功能引入于 16.2 版本,功能标志hide_projects_of_banned_users。默认禁用。

极狐GitLab 管理员可以封禁和解禁用户。被封禁的用户处于禁用状态,他们的项目、议题、合并请求和评论被隐藏。

被禁止的用户:

  • 无法登录或访问任何仓库。
    • 任何相关联的项目、议题、合并请求或评论都被隐藏。
  • 无法使用 slash 命令
  • 不占用席位

封禁用户

要禁用用户并隐藏他们的贡献,管理员可以封禁该用户。

可以在管理中心禁止用户。操作步骤:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 到您想要禁止的用户旁,选择 ( )。
  4. 在下拉菜单中,选择 禁止用户

解禁用户

  • 通过状态过滤用户的能力引入于极狐GitLab 17.0。

可以在管理中心解禁被封禁的用户。操作步骤:

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 在搜索框中,通过 State=Banned 过滤并点击 Enter
  4. 到您想要禁止的用户旁,选择 ( )。
  5. 在下拉菜单中,选择 解禁用户

用户的状态设置为激活,他们消耗订阅席位

删除用户

使用管理中心删除用户。

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 对于您想要删除的用户,选择 ( ),然后找到 删除用户
  4. 输入用户名。
  5. 选择 删除用户
note 如果群组有继承的或直接的所有者,您只能删除用户。如果用户是唯一的群组所有者,则您不能删除他们。

您还可以删除用户及其贡献,例如合并请求、议题,和他们是唯一群组所有者的群组。

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 对于您想要删除的用户,选择 ( ),然后找到 删除用户和贡献
  4. 输入用户名。
  5. 选择 删除用户和贡献
note 在 15.1 版本之前,对于删除的用户是直接成员中唯一所有者的群组,群组将被删除。

信任和不信任用户

  • 引入于极狐GitLab 16.5。
  • 通过状态过滤用户的能力引入于极狐GitLab 17.0。

您可以从 管理员 区域来信任和不信任用户。

默认情况下,一个不受信任的用户会被阻止创建议题、注释和代码片段。当您信任用户时,他们可以创建议题、注释和代码片段。

先决条件:

  • 您必须是管理员。

::Tabs

:::TabTitle 信任用户

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 选择用户。
  4. 用户管理员 下拉菜单中,选择 信任用户
  5. 在确认对话框中,选择 信任用户

用户就成为受信任用户。

:::TabTitle 非信任用户

  1. 在左侧导航栏,底部,选择 管理员
  2. 选择 概览 > 用户
  3. 在搜索框中,通过 State=Trusted 过滤并点击 Enter
  4. 选择用户。
  5. 用户管理员 下拉菜单中,选择 不信任用户
  6. 在确认对话框中,选择 不信任用户

用户就成为不受信任用户。

::EndTabs

故障排除

修改用户时,您可能需要根据特定条件对他们执行批量操作。以下 Rails 控制台脚本显示了一些示例。您可以启动 Rails 控制台会话,并使用类似于以下内容的脚本:

停用最近没有活动的用户

管理员可以停用最近没有活动的用户。

caution 无论运行是否正确,更改数据的命令可能会造成损坏。始终首先在测试环境中运行命令,并准备好备份实例进行恢复。
days_inactive = 90
inactive_users = User.active.where("last_activity_on <= ?", days_inactive.days.ago)

inactive_users.each do |user|
    puts "user '#{user.username}': #{user.last_activity_on}"
    user.deactivate!
end

禁用最近没有活动的用户

管理员可以禁用最近没有活动的用户。

caution 无论运行是否正确,更改数据的命令可能会造成损坏。始终首先在测试环境中运行命令,并准备好备份实例进行恢复。
days_inactive = 90
inactive_users = User.active.where("last_activity_on <= ?", days_inactive.days.ago)

inactive_users.each do |user|
    puts "user '#{user.username}': #{user.last_activity_on}"
    user.block!
end

禁用或删除没有项目或群组的用户

管理员可以禁用或删除没有项目或群组的用户。

caution 无论运行是否正确,更改数据的命令可能会造成损坏。始终首先在测试环境中运行命令,并准备好备份实例进行恢复。
users = User.where('id NOT IN (select distinct(user_id) from project_authorizations)')

# How many users are removed?
users.count

# If that count looks sane:

# You can either block the users:
users.each { |user|  user.blocked? ? nil  : user.block! }

# Or you can delete them:
  # need 'current user' (your user) for auditing purposes
current_user = User.find_by(username: '<your username>')

users.each do |user|
  DeleteUserWorker.perform_async(current_user.id, user.id)
end