17119: Merge branch 'master' into 17119-add-filter-groups
[arvados.git] / doc / api / methods / groups.html.textile.liquid
1 ---
2 layout: default
3 navsection: api
4 navmenu: API Methods
5 title: "groups"
6 ...
7 {% comment %}
8 Copyright (C) The Arvados Authors. All rights reserved.
9
10 SPDX-License-Identifier: CC-BY-SA-3.0
11 {% endcomment %}
12
13 API endpoint base: @https://{{ site.arvados_api_host }}/arvados/v1/groups@
14
15 Object type: @j7d0g@
16
17 Example UUID: @zzzzz-j7d0g-0123456789abcde@
18
19 h2. Resource
20
21 Groups provides a way to apply the same permissions to a set of Arvados objects.  See "permission model":{{site.baseurl}}/api/permission-model.html for details.
22
23 Each Group has, in addition to the "Common resource fields":{{site.baseurl}}/api/resources.html:
24
25 table(table table-bordered table-condensed).
26 |_. Attribute|_. Type|_. Description|_. Example|
27 |name|string|||
28 |group_class|string|Type of group. @project@ and @filter@ indicate that the group should be displayed by Workbench and arv-mount as a project for organizing and naming objects. @role@ is used as part of the "permission system":{{site.baseurl}}/api/permission-model.html. |@"filter"@
29 @"project"@
30 @"role"@|
31 |description|text|||
32 |properties|hash|User-defined metadata, may be used in queries using "subproperty filters":{{site.baseurl}}/api/methods.html#subpropertyfilters ||
33 |writable_by|array|List of UUID strings identifying Users and other Groups that have write permission for this Group.  Only users who are allowed to administer the Group will receive a full list.  Other users will receive a partial list that includes the Group's owner_uuid and (if applicable) their own user UUID.||
34 |trash_at|datetime|If @trash_at@ is non-null and in the past, this group and all objects directly or indirectly owned by the group will be hidden from API calls.  May be untrashed.||
35 |delete_at|datetime|If @delete_at@ is non-null and in the past, the group and all objects directly or indirectly owned by the group may be permanently deleted.||
36 |is_trashed|datetime|True if @trash_at@ is in the past, false if not.||
37
38 @filter@ groups are virtual groups; they can not own other objects. Filter groups have a special @properties@ field named @filters@, which must be an array of filter conditions. See "list method filters":{{site.baseurl}}/api/methods.html#filters for details on the syntax of valid filters, but keep in mind that the attributes must include the object type (@collections@, @container_requests@, @groups@, @workflows@), separated with a dot from the field to be filtered on.
39
40 Filters are applied with an implied *and* between them, but each filter only applies to the object type specified. The results are subject to the usual access controls - they are a subset of all objects the user can see. Here is an example:
41
42 <pre>
43  "properties":{
44   "filters":[
45    [
46     "groups.name",
47     "like",
48     "Public%"
49    ]
50   ]
51  },
52 </pre>
53
54 This @filter@ group will return all groups (projects) that have a name starting with the word @Public@ and are visible to the user issuing the query. Because groups can contain many types of object, it will also return all objects of other types that the user can see.
55
56 The 'is_a' filter operator is of particular interest to limit the @filter@ group 'content' to the desired object(s). When the 'is_a' operator is used, the attribute must be 'uuid'. The operand may be a string or an array which means objects of either type will match the filter. This example will return all groups (projects) that have a name starting with the word @Public@, as well as all collections that are in the project with uuid @zzzzz-j7d0g-0123456789abcde@.
57
58 <pre>
59  "properties":{
60   "filters":[
61    [
62     "groups.name",
63     "like",
64     "Public%"
65    ],
66    [
67     "collections.owner_uuid",
68     "=",
69     "zzzzz-j7d0g-0123456789abcde"
70    ],
71    [
72     "uuid",
73     "is_a",
74     [
75      "arvados#group",
76      "arvados#collection"
77     ]
78    ]
79   ]
80  },
81  </pre>
82
83 h2. Methods
84
85 See "Common resource methods":{{site.baseurl}}/api/methods.html for more information about @create@, @delete@, @get@, @list@, and @update@.
86
87 Required arguments are displayed in %{background:#ccffcc}green%.
88
89 h3. contents
90
91 Retrieve a list of items owned by the group.  Use "recursive" to list objects within subprojects as well.
92
93 Arguments:
94
95 table(table table-bordered table-condensed).
96 |_. Argument |_. Type |_. Description |_. Location |_. Example |
97 {background:#ccffcc}.|uuid|string|The UUID of the group in question.|path||
98 |limit|integer (default 100)|Maximum number of items to return.|query||
99 |order|array|Attributes to use as sort keys to determine the order resources are returned, each optionally followed by @asc@ or @desc@ to indicate ascending or descending order. Sort within a resource type by prefixing the attribute with the resource name and a period.|query|@["collections.modified_at desc"]@|
100 |filters|array|Conditions for filtering items.|query|@[["uuid", "is_a", "arvados#job"]]@|
101 |recursive|boolean (default false)|Include items owned by subprojects.|query|@true@|
102 |exclude_home_project|boolean (default false)|Only return items which are visible to the user but not accessible within the user's home project.  Use this to get a list of items that are shared with the user.  Uses the logic described under the "shared" endpoint.|query|@true@|
103 |include|string|If provided with the value "owner_uuid", this will return owner objects in the "included" field of the response.|query||
104 |include_trash|boolean (default false)|Include trashed objects.|query|@true@|
105 |include_old_versions|boolean (default false)|Include past versions of the collections being listed.|query|@true@|
106
107 Notes:
108
109 Because adding access tokens to manifests can be computationally expensive, the @manifest_text@ field is not included in listed collections.  If you need it, request a "list of collections":{{site.baseurl}}/api/methods/collections.html with the filter @["owner_uuid", "=", GROUP_UUID]@, and @"manifest_text"@ listed in the select parameter.
110
111 Use filters with the attribute format @<item type>.<field name>@ to filter items of a specific type. For example: @["container_requests.state", "=", "Final"]@ to filter @container_requests@ where @state@ is @Final@. All other types of items owned by this group will be unimpacted by this filter and will still be included.
112
113 When called with “include=owner_uuid”, the @included@ field of the response is populated with users, projects, or other groups that own the objects returned in @items@.  This can be used to fetch an object and its parent with a single API call.
114
115
116 h3. create
117
118 Create a new Group.
119
120 Arguments:
121
122 table(table table-bordered table-condensed).
123 |_. Argument |_. Type |_. Description |_. Location |_. Example |
124 |group|object||query||
125 |async|boolean (default false)|Defer the permissions graph update by a configured number of seconds. (By default, @async_permissions_update_interval@ is 20 seconds). On success, the response is 202 (Accepted).|query|@true@|
126
127 h3. delete
128
129 Put a Group in the trash.  This sets the @trash_at@ field to @now@ and @delete_at@ field to @now@ + token TTL.  A trashed group is invisible to most API calls unless the @include_trash@ parameter is true.  All objects directly or indirectly owned by the Group are considered trashed as well.
130
131 Arguments:
132
133 table(table table-bordered table-condensed).
134 |_. Argument |_. Type |_. Description |_. Location |_. Example |
135 {background:#ccffcc}.|uuid|string|The UUID of the Group in question.|path||
136
137 h3. get
138
139 Gets a Group's metadata by UUID.
140
141 Arguments:
142
143 table(table table-bordered table-condensed).
144 |_. Argument |_. Type |_. Description |_. Location |_. Example |
145 {background:#ccffcc}.|uuid|string|The UUID of the Group in question.|path||
146
147 h3. list
148
149 List groups.
150
151 See "common resource list method.":{{site.baseurl}}/api/methods.html#index
152
153 h3. show
154
155 show groups
156
157 Arguments:
158
159 table(table table-bordered table-condensed).
160 |_. Argument |_. Type |_. Description |_. Location |_. Example |
161 {background:#ccffcc}.|uuid|string||path||
162
163 h3. update
164
165 Update attributes of an existing Group.
166
167 Arguments:
168
169 table(table table-bordered table-condensed).
170 |_. Argument |_. Type |_. Description |_. Location |_. Example |
171 {background:#ccffcc}.|uuid|string|The UUID of the Group in question.|path||
172 |group|object||query||
173 |async|boolean (default false)|Defer the permissions graph update by a configured number of seconds. (By default, @async_permissions_update_interval@ is 20 seconds). On success, the response is 202 (Accepted).|query|@true@|
174
175 h3. untrash
176
177 Remove a Group from the trash.  This sets the @trash_at@ and @delete_at@ fields to @null@.
178
179 Arguments:
180
181 table(table table-bordered table-condensed).
182 |_. Argument |_. Type |_. Description |_. Location |_. Example |
183 {background:#ccffcc}.|uuid|string|The UUID of the Group to untrash.|path||
184 |ensure_unique_name|boolean (default false)|Rename project uniquely if untrashing it would fail with a unique name conflict.|query||
185
186 h3. shared
187
188 This endpoint returns the toplevel set of groups to which access is granted through a chain of one or more permission links rather than through direct ownership by the current user account.  This is useful for clients which wish to browse the list of projects the user has permission to read which are not part of the "home" project tree.  Similar behavior is also available with the @exclude_home_project@ option of the "contents" endpoint.
189
190 Specifically, the logic is:
191
192 <pre>
193 select groups that are readable by current user AND
194     (the owner_uuid is a user (but not the current user) OR
195      the owner_uuid is not readable by the current user OR
196      the owner_uuid is a group but group_class is not a project)
197 </pre>
198
199 table(table table-bordered table-condensed).
200 |_. Argument |_. Type |_. Description |_. Location |_. Example |
201 |include|string|If provided with the value "owner_uuid", this will return owner objects in the @included@ field of the response.|query||
202
203 Notes:
204
205 When called with “include=owner_uuid”, the @included@ field of the response is populated with users and non-project groups that own the objects returned in @items@.
206
207 In addition to the "include" parameter this endpoint also supports the same parameters as the "list method.":{{site.baseurl}}/api/methods.html#index