15922: Preserve writable_by in user and collection responses.
authorTom Clegg <tom@tomclegg.ca>
Mon, 9 Dec 2019 21:36:23 +0000 (16:36 -0500)
committerTom Clegg <tom@tomclegg.ca>
Thu, 12 Dec 2019 14:59:58 +0000 (09:59 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@tomclegg.ca>

lib/controller/federation/conn.go
lib/controller/router/response.go
sdk/go/arvados/collection.go
sdk/go/arvados/user.go

index 174ece134ff95cc5eeb78fa8153eaaad917929c0..a12ebc1fafba779a6e967ff92d5e43db85189ef8 100644 (file)
@@ -345,6 +345,7 @@ var userAttrsCachedFromLoginCluster = map[string]bool{
        "is_invited":   false,
        "owner_uuid":   false,
        "uuid":         false,
+       "writable_by":  false,
 }
 
 func (conn *Conn) UserList(ctx context.Context, options arvados.ListOptions) (arvados.UserList, error) {
index 23462bcb0c5feee76a5f7bea368eb29f97a57dba..7f6e06844fe0a9d6ccb350aa260279be5d172bb3 100644 (file)
@@ -45,9 +45,11 @@ func applySelectParam(selectParam []string, orig map[string]interface{}) map[str
                        selected[attr] = v
                }
        }
-       // Preserve "kind" even if not requested
-       if v, ok := orig["kind"]; ok {
-               selected["kind"] = v
+       // Some keys are always preserved, even if not requested
+       for _, k := range []string{"kind", "writable_by"} {
+               if v, ok := orig[k]; ok {
+                       selected[k] = v
+               }
        }
        return selected
 }
index 4c9305f3f7a7e0fb7b4ac2e38898a7eb0441ac07..5ac35e2292e97809cdb68e6d06ab937193cdba4f 100644 (file)
@@ -36,6 +36,7 @@ type Collection struct {
        DeleteAt                  *time.Time             `json:"delete_at"`
        IsTrashed                 bool                   `json:"is_trashed"`
        Properties                map[string]interface{} `json:"properties"`
+       WritableBy                []string               `json:"writable_by,omitempty"`
 }
 
 func (c Collection) resourceName() string {
index 30bc094d07c95e91b9a930c0bb923e4d4d6d908e..950b2ff4e2799c2e44f33d85e74155d7bc26aa3c 100644 (file)
@@ -24,6 +24,7 @@ type User struct {
        ModifiedByUserUUID   string                 `json:"modified_by_user_uuid"`
        ModifiedByClientUUID string                 `json:"modified_by_client_uuid"`
        Prefs                map[string]interface{} `json:"prefs"`
+       WritableBy           []string               `json:"writable_by,omitempty"`
 }
 
 // UserList is an arvados#userList resource.