From a41c0f6aa41b658c8f2947c46cb90778894f5cf3 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Thu, 16 Aug 2018 15:36:30 -0400 Subject: [PATCH 1/1] 13146: Don't return "included" field unless non-nil Update documention/comments. Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- doc/api/methods/groups.html.textile.liquid | 23 +++++++++++++++++++ .../app/controllers/application_controller.rb | 6 +++-- .../arvados/v1/groups_controller.rb | 2 +- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/doc/api/methods/groups.html.textile.liquid b/doc/api/methods/groups.html.textile.liquid index e87bc51ad4..cec8063182 100644 --- a/doc/api/methods/groups.html.textile.liquid +++ b/doc/api/methods/groups.html.textile.liquid @@ -125,3 +125,26 @@ table(table table-bordered table-condensed). |_. Argument |_. Type |_. Description |_. Location |_. Example | {background:#ccffcc}.|uuid|string|The UUID of the Group to untrash.|path|| |ensure_unique_name|boolean (default false)|Rename project uniquely if untrashing it would fail with a unique name conflict.|query|| + +h3. shared + +This endpoint returns the toplevel set of groups which are *not* reachable through a direct ownership chain of projects starting from the current user account. In other words, groups which to which access was granted via a permission link or chain of links. + +This also returns (in the "included" field) the objects that own those projects (users or non-project groups). + +The logic is: + +
+select groups that are readable by current user AND
+    the owner_uuid is a user (but not the current user) OR
+    the owner_uuid is not readable by the current user OR
+    the owner_uuid is a group but group_class is not a project
+
+ +The intended use of this endpoint is to support clients which wish to browse the list of projects the user has permission to read which are not part of the "home" project (projects directly owned by the user). + +This endpoint supports the same parameters as the "list method.":{{site.baseurl}}/api/methods.html#index It also supports the "include" parameter: + +table(table table-bordered table-condensed). +|_. Argument |_. Type |_. Description |_. Location |_. Example | +|include|string|If provided with the value "owner_uuid", this will return owner objects in the "included" field of the response.|query|?include=owner_uuid| diff --git a/services/api/app/controllers/application_controller.rb b/services/api/app/controllers/application_controller.rb index a9134ad59c..81e4b961e4 100644 --- a/services/api/app/controllers/application_controller.rb +++ b/services/api/app/controllers/application_controller.rb @@ -491,9 +491,11 @@ class ApplicationController < ActionController::Base :self_link => "", :offset => @offset, :limit => @limit, - :items => @objects.as_api_response(nil, {select: @select}), - :included => @extra_included.as_api_response(nil, {select: @select}), + :items => @objects.as_api_response(nil, {select: @select}) } + if @extra_included + list[:included] = @extra_included.as_api_response(nil, {select: @select}) + end case params[:count] when nil, '', 'exact' if @objects.respond_to? :except diff --git a/services/api/app/controllers/arvados/v1/groups_controller.rb b/services/api/app/controllers/arvados/v1/groups_controller.rb index f458d9fb96..e8ce4aae65 100644 --- a/services/api/app/controllers/arvados/v1/groups_controller.rb +++ b/services/api/app/controllers/arvados/v1/groups_controller.rb @@ -73,7 +73,7 @@ class Arvados::V1::GroupsController < ApplicationController # other words, groups which to which access was granted via a # permission link or chain of links. # - # This also returns (in the "includes" field) the objects that own + # This also returns (in the "included" field) the objects that own # those projects (users or non-project groups). # # select groups that are readable by current user AND -- 2.30.2