diff --git a/models/group/errors.go b/models/group/errors.go index 812fc6ddc9..52aafbf655 100644 --- a/models/group/errors.go +++ b/models/group/errors.go @@ -42,3 +42,21 @@ func IsErrGroupTooDeep(err error) bool { func (err ErrGroupTooDeep) Error() string { return fmt.Sprintf("group has reached or exceeded the subgroup nesting limit [id: %d]", err.ID) } + +type ErrUserDoesNotHaveAccessToGroup struct { + UserID, GroupID int64 +} + +func (e ErrUserDoesNotHaveAccessToGroup) Error() string { + return fmt.Sprintf("user %d does not have access to group %d", e.UserID, e.GroupID) +} + +func (e ErrUserDoesNotHaveAccessToGroup) Unwrap() error { + return util.ErrPermissionDenied +} + +func IsErrUserDoesNotHaveAccessToGroup(err error) bool { + var eNoAccess ErrUserDoesNotHaveAccessToGroup + ok := errors.As(err, &eNoAccess) + return ok +} diff --git a/services/group/group.go b/services/group/group.go index d09077cbbf..ad48baaeb7 100644 --- a/services/group/group.go +++ b/services/group/group.go @@ -98,7 +98,10 @@ func MoveGroupItem(ctx context.Context, opts MoveGroupOptions, doer *user_model. return err } if !canAccessNewParent { - return errors.New("cannot access new parent group") + return group_model.ErrUserDoesNotHaveAccessToGroup{ + GroupID: opts.NewParent, + UserID: doer.ID, + } } err = parentGroup.LoadSubgroups(ctx, false)