项目成员
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
成员是指能够访问您项目的用户和组。成员可以直接添加到项目中,也可以通过组继承访问权限。
每个成员都有一个角色,决定了他们在项目中的操作权限。拥有适当角色的项目成员可以添加用户到项目、从项目中移除用户,以及管理访问请求来控制对项目资源的访问。
成员类型
用户可以直接或间接成为组或项目的成员。 间接成员可以是继承的、共享的或继承共享的。
| 成员类型 | 成员过程 |
|---|---|
| 直接 | 用户被直接添加到当前组或项目。 |
| 继承 | 用户是包含当前组或项目的父组的成员。 |
| 共享 | 用户是被邀请到当前组或项目的组的成员。 |
| 继承共享 | 用户是被邀请到当前组或项目的祖先组的组的成员。 |
| 间接 | 继承、共享或继承共享成员的统称。 |
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart RL
accTitle: 成员类型
accDescr: 描述成员类型及其继承关系
subgraph 组 A
A(直接成员)
B{{共享成员}}
subgraph 项目 X
H(直接成员)
C{{继承成员}}
D{{继承共享成员}}
E{{共享成员}}
end
A-->|在项目 X 中的继承成员
在组 A 中的直接成员|C
end
subgraph 组 C
G(直接成员)
end
subgraph 组 B
F(直接成员)
end
F-->|组 B
被邀请到
组 A|B
B-->|在项目 X 中的继承成员
在组 A 中的间接成员|D
G-->|组 C 被邀请到项目 X|E
在上面的示例中:
- 管理员 是从 demo 组继承的成员。
- 用户 0 是从 demo 组继承的成员。
- 用户 1 是从被邀请到此项目的 Acme 组共享的成员。
- 用户 2 是从被邀请到 demo 组的 Toolbox 组继承共享的成员。
- 用户 3 是直接添加到此项目的成员。
安全考虑
Git 是一个分布式版本控制系统(DVCS)。 所有处理源代码的人员都拥有完整仓库的本地副本。
在 GitLab 中,每个拥有 Reporter 角色或更高的项目成员都可以克隆仓库来创建本地副本。 用户在获得本地副本后,可以将完整仓库上传到任何地方,包括:
- 他们控制的另一个项目。
- 不同的服务器。
- 外部托管服务。
访问控制无法阻止已获得仓库访问权限的用户有意分享源代码。 所有 Git 管理平台都具有分布式版本控制系统的这一固有特性。
虽然您无法阻止授权用户的有意分享,但可以采取以下措施防止无意分享和信息破坏:
添加用户到项目
将用户添加到项目,使其成为直接成员并获得执行操作的权限。
先决条件:
- 您必须拥有 Owner 或 Maintainer 角色。
- 组成员锁定必须已禁用。
- 对于 GitLab Self-Managed 实例:
要将用户添加到项目:
-
在左侧边栏,选择 搜索或跳转至 并找到您的项目。
-
选择 管理 > 成员。
-
选择 邀请成员。
-
如果该用户:
- 拥有 GitLab 账户,输入其用户名。
- 没有 GitLab 账户,输入其电子邮件地址。
-
可选。选择一个访问过期日期。 从该日期起,用户将无法再访问该项目。
如果您选择了访问过期日期,项目成员会在访问权限过期前七天收到邮件通知。
在角色过期前,Maintainer 拥有完整权限,包括延长自身访问过期日期的能力。
-
选择 邀请。 如果您使用以下方式邀请用户:
- GitLab 用户名,他们会被添加到成员列表中。
- 电子邮件地址,邀请会发送到其邮箱,并提示他们创建账户。 如果邀请未被接受,GitLab 会在两天、五天和十天后发送提醒邮件。 未接受的邀请会在 90 天后自动删除。
您可以分配的角色
您可以分配的最高角色取决于您对组拥有 Owner 还是 Maintainer 角色。例如,您可以设置的最高角色是:
- Owner (
50),如果您对项目拥有 Owner 角色。 - Maintainer (
40),如果您对项目拥有 Maintainer 角色。
Owner 角色只能为组添加。
查看待提升的用户
如果启用了角色提升的管理员审批,将现有用户提升为计费角色的成员请求需要管理员审批。
要查看待提升的用户:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 管理 > 成员。
- 选择 角色提升 标签页。
如果未显示 角色提升 标签页,说明项目没有待处理的提升。
更新过期日期和角色
如果用户是:
- 项目的直接成员,可以在项目上直接更新过期日期和角色字段。
- 继承、共享或继承共享成员,必须在成员所属的组上更新过期日期和角色字段。
与组共享项目
与其逐个添加用户,您可以将项目与整个组共享。
从另一个项目导入成员
您可以将另一个项目的直接成员导入到您自己的项目中。 导入的项目成员保留与您导入的项目相同的权限。
只导入项目的直接成员。项目的继承或共享成员不会被导入。
先决条件:
- 您必须至少拥有 Maintainer 角色。
如果导入成员在目标项目中的角色是:
- Maintainer,那么源项目拥有 Owner 角色的成员会被导入为 Maintainer 角色。
- Owner,那么源项目拥有 Owner 角色的成员会被导入为 Owner 角色。
要导入项目成员:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 管理 > 成员。
- 选择 从项目导入。
- 选择项目。您只能查看您是维护者的项目。
- 选择 导入项目成员。
如果导入成功,会显示成功消息。 要在成员标签页查看导入的成员,请刷新页面。
从项目移除成员
如果用户是:
- 项目的直接成员,您可以直接从项目中移除他们。
- 来自父组的继承成员,您只能从父组本身移除他们。
先决条件:
- 要移除拥有以下角色的直接成员:
- Maintainer、Developer、Reporter、Planner 或 Guest 角色,您必须拥有 Maintainer 角色。
- Owner 角色,您必须拥有 Owner 角色。
- 可选。将成员从分配给他们的所有问题和合并请求中取消分配。
要从项目移除成员:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 管理 > 成员。
- 在要移除的项目成员旁边,选择 移除成员。
- 可选。在确认对话框中,选择同时从此用户的相关问题和合并请求中取消分配复选框。
- 为防止私有项目敏感信息泄露,请验证该成员是否未分叉私有仓库或创建 webhook。现有的分叉将继续接收来自上游项目的更改,webhook 也将继续接收更新。您可能还需要配置项目以防止组中的项目在其组外被分叉。
- 选择 移除成员。
确保被移除的用户无法重新邀请自己
拥有 Maintainer 或 Owner 角色的用户可以利用竞争条件,在管理员移除他们后重新加入组或项目。
为避免此问题,GitLab 管理员可以:
- 从 GitLab Rails 控制台中移除恶意用户会话。
- 模拟恶意用户以:
- 从项目中移除用户。
- 将用户登出 GitLab。
- 阻止恶意用户账户。
- 移除恶意用户账户。
- 更改恶意用户账户的密码。
筛选和排序项目成员
您可以在项目中筛选和排序成员。
显示直接成员
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 管理 > 成员。
- 在筛选成员框中,选择
成员类型=直接。 - 按 Enter。
显示间接成员
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 管理 > 成员。
- 在筛选成员框中,选择
成员类型=间接。 - 按 Enter。
在项目中搜索成员
要搜索项目成员:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 管理 > 成员。
- 在搜索框中,输入成员的姓名、用户名或电子邮件。
- 按 Enter。
在项目中排序成员
您可以按以下方式对成员进行升序或降序排序:
- 账户名称
- 授予访问日期
- 角色(成员在项目中的角色)
- 用户创建日期
- 最后活动日期
- 最后登录日期
要对成员排序:
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 管理 > 成员。
- 在成员列表顶部,从下拉列表中选择要排序的项目。
请求项目访问权限
GitLab 用户可以请求成为项目成员。
- 在左侧边栏,选择 搜索或跳转至 并找到您想成为成员的项目。
- 在右上角,选择垂直省略号( )并选择请求访问。
邮件会发送给最近活跃的项目 Maintainer 或 Owner。 最多通知十个项目 Maintainer 或 Owner。 任何项目 Owner 或 Maintainer 都可以批准或拒绝请求。 项目 Maintainer 不能批准 Owner 角色的访问请求。
如果项目没有直接的 Owner 或 Maintainer,通知会发送给项目父组的最近活跃的 Owner。
撤销项目访问请求
您可以在请求被批准前撤销项目访问请求。 要撤销访问请求:
- 在左侧边栏,选择 搜索或跳转至 并找到您请求访问的项目。
- 在项目名称旁边,选择撤销访问请求。
防止用户请求项目访问权限
您可以防止用户请求项目访问权限。
先决条件:
- 您必须拥有项目的 Owner 角色。
- 项目必须是公开的。
- 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
- 选择 设置 > 常规。
- 展开可见性、项目功能、权限。
- 在项目可见性下,确保用户可以请求访问复选框未被选中。
- 选择保存更改。
成员身份和可见性权限
根据其成员类型,组或项目的成员被授予不同的可见性级别和组或项目的权限。
下表列出了项目成员的成员身份和可见性权限。
| 操作 | 直接项目成员 | 继承项目成员 | 直接共享项目成员 | 继承共享项目成员 |
|---|---|---|---|---|
| 生成看板 | 是 | 是 | 是 | 是 |
| 查看父组的问题 1 | 是 | 是 | 是 | 是 |
| 查看父组的标签 | 是 | 是 | 是 | 是 |
| 查看父组的里程碑 | 是 | 是 | 是 | 是 |
| 被共享到其他组 | 是 | 否 | 否 | 否 |
| 被导入到其他项目 | 是 | 否 | 否 | 否 |
| 与其他成员共享项目 | 是 | 是 | 是 | 是 |
脚注:
- 用户只能查看他们有权访问的项目的问题。
下表列出了组成员的成员身份和可见性权限。
| 操作 | 直接组成员 | 继承组成员 | 直接共享组成员 | 继承共享组成员 |
|---|---|---|---|---|
| 生成看板 | 是 | 是 | 是 | 是 |
| 查看父组的问题 | 是 | 是 | 是 | 是 |
| 查看父组的标签 | 是 | 是 | 是 | 是 |
| 查看父组的里程碑 | 是 | 是 | 是 | 是 |
在下面的示例中,用户是:
子组的直接成员。子子组的继承成员。子组-2和子组-3的间接成员。子子组-2和子子组-3的间接继承成员。
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: 组继承图
accDescr: 用户继承,通过子组的直接和间接继承
classDef user stroke:green,color:green;
root --> subgroup --> subsubgroup
root-2 --> subgroup-2 --> subsubgroup-2
root-3 --> subgroup-3 --> subsubgroup-3
subgroup -. shared .-> subgroup-2 -. shared .-> subgroup-3
User-. member .- subgroup
class User user