diff --git a/internal/dms/biz/member.go b/internal/dms/biz/member.go index d9008e28..b7973d26 100644 --- a/internal/dms/biz/member.go +++ b/internal/dms/biz/member.go @@ -99,11 +99,9 @@ func (m *MemberUsecase) CreateMember(ctx context.Context, currentUserUid string, return "", fmt.Errorf("create member error: %v", err) } - // 检查成员用户存在 - if exist, err := m.userUsecase.CheckUserExist(ctx, []string{memberUserUid}); err != nil { - return "", fmt.Errorf("check user exist failed: %v", err) - } else if !exist { - return "", fmt.Errorf("user not exist") + // 检查成员用户可纳入(存在、未删除、状态正常) + if err := m.userUsecase.EnsureUserEligibleForProjectMembership(ctx, memberUserUid); err != nil { + return "", err } if err := m.CheckRoleAndOpRanges(ctx, roleAndOpRanges); err != nil { diff --git a/internal/dms/biz/user.go b/internal/dms/biz/user.go index 03575078..49e1abc1 100644 --- a/internal/dms/biz/user.go +++ b/internal/dms/biz/user.go @@ -627,6 +627,24 @@ func (d *UserUsecase) CheckUserExist(ctx context.Context, userUids []string) (ex return d.repo.CheckUserExist(ctx, userUids) } +// EnsureUserEligibleForProjectMembership 校验用户可被新纳入项目成员/成员组:存在、未删除、状态正常。 +func (d *UserUsecase) EnsureUserEligibleForProjectMembership(ctx context.Context, userUid string) error { + user, err := d.repo.GetUserIncludeDeleted(ctx, userUid) + if err != nil { + if errors.Is(err, pkgErr.ErrStorageNoData) { + return fmt.Errorf("user not exist") + } + return fmt.Errorf("get user failed: %v", err) + } + if user.Deleted { + return fmt.Errorf("user has been deleted") + } + if user.Stat != UserStatOK { + return fmt.Errorf("user is disabled") + } + return nil +} + // InsureUserToUserGroups 确保用户属于指定的多个用户组 func (d *UserUsecase) InsureUserToUserGroups(ctx context.Context, userGroupUids []string, userUid string) (err error) { // check