+};
+
+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 };
+ dispatch: Dispatch;
+ permissionService: PermissionService;
+}
+
+export const deletePermission = async ({ head, tail, dispatch, permissionService }: DeletePermissionLinkArgs) => {
+
+ try {
+
+ const permissionsResponse = await permissionService.list({
+
+ filters: new FilterBuilder()
+ .addEqual('tailUuid', tail.uuid)
+ .addEqual('headUuid', head.uuid)
+ .getFilters()
+
+ });
+
+ const [permission] = permissionsResponse.items;
+
+ if (permission) {
+
+ await permissionService.delete(permission.uuid);
+
+ } else {
+
+ throw new Error('Permission not found');
+
+ }
+
+
+ } catch (e) {
+
+ dispatch(snackbarActions.OPEN_SNACKBAR({
+ message: `Could not delete ${tail.name} -> ${head.name} relation`,
+ kind: SnackbarKind.ERROR,
+ }));
+
+ }
+