diff --git a/changelog/unreleased/fix-spase-share-update.md b/changelog/unreleased/fix-spase-share-update.md new file mode 100644 index 00000000000..e5c09a433aa --- /dev/null +++ b/changelog/unreleased/fix-spase-share-update.md @@ -0,0 +1,6 @@ +Bugfix: Fix space share update + +We fixed the permission check for updating the space shares when update an expirationDateTime only. + +https://github.com/cs3org/reva/pull/4656 +https://github.com/owncloud/ocis/issues/8905 diff --git a/internal/grpc/services/gateway/usershareprovider.go b/internal/grpc/services/gateway/usershareprovider.go index dd0e8604c86..d58db685be1 100644 --- a/internal/grpc/services/gateway/usershareprovider.go +++ b/internal/grpc/services/gateway/usershareprovider.go @@ -181,8 +181,24 @@ func (s *svc) updateSpaceShare(ctx context.Context, req *collaboration.UpdateSha if err != nil { return nil, errors.Wrap(err, "gateway: error denying grant in storage") } + } else if grant.GetPermissions() == nil && grant.GetGrantee() != nil { + listGrantRes, err := s.listGrants(ctx, req.GetShare().GetResourceId()) + if err != nil { + return nil, errors.Wrap(err, "gateway: error getting grant to remove from storage") + } + for _, g := range listGrantRes.Grants { + if isEqualGrantee(g.Grantee, grant.GetGrantee()) { + grant.Permissions = g.Permissions + req.Share.Permissions = &collaboration.SharePermissions{Permissions: g.Permissions} + break + } + } + st, err = s.updateGrant(ctx, req.GetShare().GetResourceId(), grant, opaque) + if err != nil { + return nil, errors.Wrap(err, "gateway: error adding grant to storage") + } } else { - if !grant.Permissions.RemoveGrant { + if !grant.GetPermissions().GetRemoveGrant() { // this request might remove Manager Permissions so we need to // check if there is at least one manager remaining of the // resource.