From 47b1e9b2fa97d03438d4ef35f90a5fd0a33bbe34 Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Sun, 16 Dec 2018 23:24:56 +0100 Subject: [PATCH] Update group members implementation to match docs Feature #14505 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- .../groups-panel/groups-panel-actions.ts | 55 ++++++++----------- .../groups-panel-middleware-service.ts | 2 +- src/views/groups-panel/groups-panel.tsx | 2 +- 3 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/store/groups-panel/groups-panel-actions.ts b/src/store/groups-panel/groups-panel-actions.ts index 1c6223bd..8632098e 100644 --- a/src/store/groups-panel/groups-panel-actions.ts +++ b/src/store/groups-panel/groups-panel-actions.ts @@ -110,29 +110,6 @@ export const createGroup = ({ name, users = [] }: CreateGroupFormData) => } }; -interface DeleteGroupMemberArgs { - user: { uuid: string, name: string }; - group: { uuid: string, name: string }; - dispatch: Dispatch; - permissionService: PermissionService; -} - -export const deleteGroupMember = async ({ user, group, ...args }: DeleteGroupMemberArgs) => { - - await deletePermission({ - tail: user, - head: group, - ...args, - }); - - await deletePermission({ - tail: group, - head: user, - ...args, - }); - -}; - interface AddGroupMemberArgs { user: { uuid: string, name: string }; group: { uuid: string, name: string }; @@ -140,17 +117,14 @@ interface AddGroupMemberArgs { permissionService: PermissionService; } +/** + * Group membership is determined by whether the group has can_read permission on an object. + * If a group G can_read an object A, then we say A is a member of G. + * + * [Permission model docs](https://doc.arvados.org/api/permission-model.html) + */ export const addGroupMember = async ({ user, group, ...args }: AddGroupMemberArgs) => { - - - await createPermission({ - head: { ...group }, - tail: { ...user }, - permissionLevel: PermissionLevel.CAN_MANAGE, - ...args, - }); - await createPermission({ head: { ...user }, tail: { ...group }, @@ -189,6 +163,23 @@ const createPermission = async ({ head, tail, permissionLevel, dispatch, permiss }; +interface DeleteGroupMemberArgs { + user: { uuid: string, name: string }; + group: { uuid: string, name: string }; + dispatch: Dispatch; + permissionService: PermissionService; +} + +export const deleteGroupMember = async ({ user, group, ...args }: DeleteGroupMemberArgs) => { + + await deletePermission({ + tail: group, + head: user, + ...args, + }); + +}; + interface DeletePermissionLinkArgs { head: { uuid: string, name: string }; tail: { uuid: string, name: string }; diff --git a/src/store/groups-panel/groups-panel-middleware-service.ts b/src/store/groups-panel/groups-panel-middleware-service.ts index d3ff5932..7c70666e 100644 --- a/src/store/groups-panel/groups-panel-middleware-service.ts +++ b/src/store/groups-panel/groups-panel-middleware-service.ts @@ -67,7 +67,7 @@ export class GroupsPanelMiddlewareService extends DataExplorerMiddlewareService const permissions = await this.services.permissionService.list({ filters: new FilterBuilder() - .addIn('headUuid', response.items.map(item => item.uuid)) + .addIn('tailUuid', response.items.map(item => item.uuid)) .getFilters() }); diff --git a/src/views/groups-panel/groups-panel.tsx b/src/views/groups-panel/groups-panel.tsx index 44a262fd..8fa47f71 100644 --- a/src/views/groups-panel/groups-panel.tsx +++ b/src/views/groups-panel/groups-panel.tsx @@ -124,7 +124,7 @@ const GroupMembersCount = connect( const permissions = filterResources((resource: LinkResource) => resource.kind === ResourceKind.LINK && resource.linkClass === LinkClass.PERMISSION && - resource.headUuid === props.uuid + resource.tailUuid === props.uuid )(state.resources); return { -- 2.30.2