Members of a project
DETAILS: Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
Members are the users and groups who have access to your project.
Each member gets a role, which determines what they can do in the project.
Membership types
- Changed to display invited group members on the Members tab of the Members page in GitLab 16.10 with a flag named
webui_members_inherited_users
. Disabled by default.- Feature flag
webui_members_inherited_users
was enabled on GitLab.com and self-managed in GitLab 17.0.- Feature flag
webui_members_inherited_users
removed in GitLab 17.4. Members of invited groups displayed by default.
Users can become members of a group or project directly or indirectly. Indirect membership can be inherited, shared, or inherited shared.
Membership type | Membership process |
---|---|
Direct | The user is added directly to the current group or project. |
Inherited | The user is a member of a parent group that contains the current group or project. |
Shared | The user is a member of a group invited to the current group or project. |
Inherited shared | The user is a member of a group invited to an ancestor of the current group or project. |
Indirect | An umbrella term for inherited, shared, or inherited shared members. |
%%{init: { "fontFamily": "GitLab Sans" }}%%
flowchart RL
accTitle: Membership types
accDescr: Describes membership types and their inheritance
subgraph Group A
A(Direct member)
B{{Shared member}}
subgraph Project X
H(Direct member)
C{{Inherited member}}
D{{Inherited shared member}}
E{{Shared member}}
end
A-->|Inherited membership in Project X\nDirect membership in Group A|C
end
subgraph Group C
G(Direct member)
end
subgraph Group B
F(Direct member)
end
F-->|Group B\ninvited to\nGroup A|B
B-->|Inherited membership in Project X\nIndirect membership in Group A|D
G-->|Group C invited to Project X|E
In the above example:
- Administrator is an inherited member from the demo group.
- User 0 is an inherited member from the demo group.
- User 1 is a shared member from the Acme group that is invited to this project.
- User 2 is an inherited shared member from the Toolbox group that is invited to the demo group.
- User 3 is a direct member added to this project.
Add users to a project
- Expiring access email notification introduced in GitLab 16.2.
- Access expiration date for direct members of subgroups and projects removed in GitLab 17.4.
Add users to a project so they become direct members and have permission to perform actions.
Prerequisites:
- You must have the Owner or Maintainer role.
- Group membership lock must be disabled.
- If sign-up is disabled, an administrator must add the user by email first.
To add a user to a project:
-
On the left sidebar, select Search or go to and find your project.
-
Select Manage > Members.
-
Select Invite members.
-
If the user:
- Has a GitLab account, enter their username.
- Doesn't have a GitLab account, enter their email address.
-
Select a default role or custom role.
-
Optional. Select an Access expiration date. From that date onward, the user can no longer access the project.
If you selected an access expiration date, the project member gets an email notification seven days before their access expires.
WARNING: If you give a member the Maintainer role and select an expiration date, that member has full permissions for the time they are in the role. This includes the ability to extend their own time in the Maintainer role.
-
Select Invite. If you invited the user using their:
- GitLab username, they are added to the members list.
- Email address, an invitation is sent to their email address, and they are prompted to create an account. If the invitation is not accepted, GitLab sends reminder emails two, five, and ten days later. Unaccepted invites are automatically deleted after 90 days.
Which roles you can assign
The maximum role you can assign depends on whether you have the Owner or Maintainer role for the group. For example, the maximum role you can set is:
- Owner (
50
), if you have the Owner role for the project. - Maintainer (
40
), if you have the Maintainer role on the project.
The Owner role can be added for the group only.
Updating expiration and role
If a user is:
- A direct member of a project, the Expiration and Role fields can be updated directly on the project.
- An inherited, shared, or inherited shared member, the Expiration and Role fields must be updated on the group that the member originates from.
Share a project with a group
Instead of adding users one by one, you can share a project with an entire group.
Import members from another project
You can import another project's direct members to your own project. Imported project members retain the same permissions as the project you import them from.
NOTE: Only direct members of a project are imported. Inherited or shared members of a project are not imported.
Prerequisites:
- You must have the Maintainer or Owner role.
If the importing member's role for the target project is:
- Maintainer, then members with the Owner role for the source project are imported with the Maintainer role.
- Owner, then members with the Owner role for the source project are imported with the Owner role.
To import a project's members:
- On the left sidebar, select Search or go to and find your project.
- Select Manage > Members.
- Select Import from a project.
- Select the project. You can view only the projects for which you're a maintainer.
- Select Import project members.
If the import is successful, a success message is displayed. To view the imported members on the Members tab, refresh the page.
Remove a member from a project
If a user is:
- A direct member of a project, you can remove them directly from the project.
- An inherited member from a parent group, you can only remove them from the parent group itself.
Prerequisites:
- To remove direct members that have the:
- Maintainer, Developer, Reporter, or Guest role, you must have the Maintainer role.
- Owner role, you must have the Owner role.
- Optional. Unassign the member from all issues and merge requests that are assigned to them.
To remove a member from a project:
- On the left sidebar, select Search or go to and find your project.
- Select Manage > Members.
- Next to the project member you want to remove, select Remove member.
- Optional. On the confirmation dialog, select the Also unassign this user from related issues and merge requests checkbox.
- To prevent leaks of sensitive information from private projects, verify the member has not forked the private repository or created webhooks. Existing forks continue to receive changes from the upstream project, and webhooks continue to receive updates. You may also want to configure your project to prevent projects in a group from being forked outside their group.
- Select Remove member.
Ensure removed users cannot invite themselves back
Malicious users with the Maintainer or Owner role could exploit a race condition that allows them to invite themselves back to a group or project that a GitLab administrator has removed them from.
To avoid this problem, GitLab administrators can:
- Remove the malicious user session from the GitLab Rails console.
- Impersonate the malicious user to:
- Remove the user from the project.
- Log the user out of GitLab.
- Block the malicious user account.
- Remove the malicious user account.
- Change the password for the malicious user account.
Filter and sort project members
You can filter and sort members in a project.
Display direct members
- On the left sidebar, select Search or go to and find your project.
- Select Manage > Members.
- In the Filter members box, select
Membership
=
Direct
. - Press Enter.
Display indirect members
- On the left sidebar, select Search or go to and find your project.
- Select Manage > Members.
- In the Filter members box, select
Membership
=
Indirect
. - Press Enter.
Search for members in a project
To search for a project member:
- On the left sidebar, select Search or go to and find your project.
- Select Manage > Members.
- In the search box, enter the member's name, username, or email.
- Press Enter.
Sort members in a project
You can sort members in ascending or descending order by:
- Account name
- Access granted date
- Role the members have in the project
- User created date
- Last activity date
- Last sign-in date
To sort members:
- On the left sidebar, select Search or go to and find your project.
- Select Manage > Members.
- At the top of the member list, from the dropdown list, select the item you want to sort by.
Request access to a project
GitLab users can request to become a member of a project.
- On the left sidebar, select Search or go to and find the project you want to be a member of.
- In the top right, select the vertical ellipsis ({ellipsis_v}) and select Request Access.
An email is sent to the most recently active project Maintainers or Owners. Up to ten project Maintainers or Owners are notified. Any project Owner or Maintainer can approve or decline the request. Project Maintainers cannot approve Owner role access requests.
If a project does not have any direct Owners or Maintainers, the notification is sent to the most recently active Owners of the project's parent group.
Withdraw an access request to a project
You can withdraw an access request to a project before the request is approved. To withdraw the access request:
- On the left sidebar, select Search or go to and find the project you requested access to.
- Next to the project name, select Withdraw Access Request.
Prevent users from requesting access to a project
You can prevent users from requesting access to a project.
Prerequisites:
- You must have the Owner role for the project.
- The project must be public.
- On the left sidebar, select Search or go to and find your project.
- Select Settings > General.
- Expand Visibility, project features, permissions.
- Under Project visibility, ensure the Users can request access checkbox is not selected.
- Select Save changes.
Membership and visibility rights
Depending on their membership type, members of groups or projects are granted different visibility levels and rights into the group or project.
The following table lists the membership and visibility rights of project members.
Action | Direct project member | Inherited project member | Direct shared project member | Inherited shared project member |
---|---|---|---|---|
Generate boards | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
View issues of parent groups 1 | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
View labels of parent groups | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
View milestones of parent groups | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
Be shared into other groups | {check-circle} Yes | {dotted-circle} No | {dotted-circle} No | {dotted-circle} No |
Be imported into other projects | {check-circle} Yes | {dotted-circle} No | {dotted-circle} No | {dotted-circle} No |
Share the project with other members | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
Footnotes:
- Users can view only issues of projects they have access to.
The following table lists the membership and visibility rights of group members.
Action | Direct group member | Inherited group member | Direct shared group member | Inherited shared group member |
---|---|---|---|---|
Generate boards | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
View issues of parent groups | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
View labels of parent groups | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
View milestones of parent groups | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes | {check-circle} Yes |
In the following example, User
is a:
- Direct member of
subgroup
. - Inherited member of
subsubgroup
. - Indirect member of
subgroup-2
andsubgroup-3
. - Indirect inherited member of
subsubgroup-2
andsubsubgroup-3
.
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Diagram of group inheritance
accDescr: User inheritance, both direct and indirect through subgroups
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