---
layout: default
navsection: admin
title: Group management
...

{% comment %}
Copyright (C) The Arvados Authors. All rights reserved.

SPDX-License-Identifier: CC-BY-SA-3.0
{% endcomment %}

This page describes how to manage groups at the command line.  You should be familiar with the "permission system":{{site.baseurl}}/api/permission-model.html .

h2. Create a group

User groups are entries in the "groups" table with @"group_class": "role"@.

<pre>
arv group create --group '{"name": "My new group", "group_class": "role"}'
</pre>

h2(#add). Add a user to a group

There are two separate permissions associated with group membership.  The first link grants the user @can_manage@ permission to manage things that the group can manage.  The second link grants permission for other users of the group to see that this user is part of the group.

<pre>
arv link create --link '{
  "link_class": "permission",
  "name": "can_manage",
  "tail_uuid": "the_user_uuid",
  "head_uuid": "the_group_uuid"}'

arv link create --link '{
  "link_class": "permission",
  "name": "can_read",
  "tail_uuid": "the_group_uuid",
  "head_uuid": "the_user_uuid"}'
</pre>

A user can also be given read-only access to a group.  In that case, the first link should be created with @can_read@ instead of @can_manage@.

h2. List groups

<pre>
arv group list --filters '[["group_class", "=", "role"]]'
</pre>

h2. List members of a group

Use the command "jq":https://stedolan.github.io/jq/ to extract the tail_uuid of each permission link which has the user uuid.

<pre>
arv link list --filters '[["link_class", "=", "permission"],
  ["head_uuid", "=", "the_group_uuid"]]' | jq .items[].tail_uuid
</pre>

h2. Share a project with a group

This will give all members of the group @can_manage@ access.

<pre>
arv link create --link '{
  "link_class": "permission",
  "name": "can_manage",
  "tail_uuid": "the_group_uuid",
  "head_uuid": "the_project_uuid"}'
</pre>

A project can also be shared read-only.  In that case, the first link should be created with @can_read@ instead of @can_manage@.

h2. List things shared with the group

Use the command "jq":https://stedolan.github.io/jq/ to extract the head_uuid of each permission link which has the object uuid.

<pre>
arv link list --filters '[["link_class", "=", "permission"],
  ["tail_uuid", "=", "the_group_uuid"]]' | jq .items[].head_uuid
</pre>

h2. Stop sharing a project with a group

This will remove access for members of the group.

The first step is to find the permission link objects.  The second step is to delete them.

<pre>
arv --format=uuid link list --filters '[["link_class", "=", "permission"],
  ["tail_uuid", "=", "the_group_uuid"], ["head_uuid", "=", "the_project_uuid"]]'

arv link delete --uuid each_link_uuid
</pre>

h2. Remove user from a group

The first step is to find the permission link objects.  The second step is to delete them.

<pre>
arv --format=uuid link list --filters '[["link_class", "=", "permission"],
  ["tail_uuid", "in", ["the_user_uuid", "the_group_uuid"]],
  ["head_uuid", "in", ["the_user_uuid", "the_group_uuid"]]'

arv link delete --uuid each_link_uuid
</pre>