mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-04 10:13:53 +08:00
修复可删除唯一团队管理员的问题
This commit is contained in:
@@ -65,3 +65,5 @@ require (
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gorm.io/driver/mysql v1.5.2 // indirect
|
||||
)
|
||||
|
||||
replace github.com/eolinker/ap-account => ../../eolinker/ap-account
|
||||
|
||||
@@ -23,8 +23,6 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/eolinker/ap-account v1.0.8 h1:HDU7WdxWu7HU8zBJc8z2itbfh89KrFfXwJHP/WtGG3Q=
|
||||
github.com/eolinker/ap-account v1.0.8/go.mod h1:5lsZwkQfnHO5YJ3Cu6X1PZwZ0gbmJBUcix0hxG8aEsY=
|
||||
github.com/eolinker/eosc v0.17.3 h1:sr2yT+v/AsqEdciRaaZZj0zL9pTufR5RvDW6+65hraQ=
|
||||
github.com/eolinker/eosc v0.17.3/go.mod h1:xgq816hpanlMXFtZw7Ztdctb1eEk9UPHchY4NfFO6Cw=
|
||||
github.com/eolinker/go-common v1.0.2 h1:rGxcrDdHr+mtMHVPdz3tx7oOsKLo0Msy6W0U1ZNsXaQ=
|
||||
|
||||
@@ -67,12 +67,13 @@ type Member struct {
|
||||
IsDelete bool `json:"is_delete"`
|
||||
}
|
||||
|
||||
func ToMember(model *team_member.Member, roles ...string) *Member {
|
||||
|
||||
func ToMember(model *team_member.Member, userId string, roles ...string) *Member {
|
||||
|
||||
return &Member{
|
||||
User: auto.UUID(model.UID),
|
||||
Roles: auto.List(roles),
|
||||
AttachTime: auto.TimeLabel(model.CreateTime),
|
||||
IsDelete: userId != model.UID,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+36
-24
@@ -4,21 +4,21 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
|
||||
"github.com/eolinker/ap-account/service/role"
|
||||
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
|
||||
department_member "github.com/eolinker/ap-account/service/department-member"
|
||||
"github.com/eolinker/go-common/auto"
|
||||
|
||||
|
||||
"github.com/eolinker/ap-account/service/user"
|
||||
|
||||
|
||||
"github.com/eolinker/go-common/store"
|
||||
|
||||
|
||||
"github.com/APIParkLab/APIPark/service/service"
|
||||
team_member "github.com/APIParkLab/APIPark/service/team-member"
|
||||
|
||||
|
||||
team_dto "github.com/APIParkLab/APIPark/module/my-team/dto"
|
||||
"github.com/APIParkLab/APIPark/service/team"
|
||||
"github.com/eolinker/go-common/utils"
|
||||
@@ -44,11 +44,15 @@ func (m *imlTeamModule) UpdateMemberRole(ctx context.Context, id string, input *
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
supperRole, err := m.roleService.GetSupperRole(ctx, role.GroupTeam)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return m.transaction.Transaction(ctx, func(ctx context.Context) error {
|
||||
if len(input.Roles) < 1 {
|
||||
return errors.New("at least one role")
|
||||
}
|
||||
|
||||
|
||||
err = m.roleMemberService.RemoveUserRole(ctx, role.TeamTarget(id), input.Users...)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -65,6 +69,14 @@ func (m *imlTeamModule) UpdateMemberRole(ctx context.Context, id string, input *
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
count, err := m.roleMemberService.CountByRole(ctx, role.TeamTarget(id), supperRole.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if count < 1 {
|
||||
return fmt.Errorf("role(%s) must have at least one member", supperRole.Name)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
@@ -74,7 +86,7 @@ func (m *imlTeamModule) GetTeam(ctx context.Context, id string) (*team_dto.Team,
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
return &team_dto.Team{
|
||||
Id: tv.Id,
|
||||
Name: tv.Name,
|
||||
@@ -110,7 +122,7 @@ func (m *imlTeamModule) Search(ctx context.Context, keyword string) ([]*team_dto
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
outList := make([]*team_dto.Item, 0, len(list))
|
||||
for _, v := range list {
|
||||
outList = append(outList, team_dto.ToItem(v, serviceNumMap[v.Id], appNumMap[v.Id]))
|
||||
@@ -138,7 +150,7 @@ func (m *imlTeamModule) Edit(ctx context.Context, id string, input *team_dto.Edi
|
||||
Description: input.Description,
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -161,7 +173,7 @@ func (m *imlTeamModule) SimpleTeams(ctx context.Context, keyword string) ([]*tea
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
projects, err := m.serviceService.Search(ctx, "", map[string]interface{}{
|
||||
"team": teamIDs,
|
||||
})
|
||||
@@ -181,7 +193,7 @@ func (m *imlTeamModule) SimpleTeams(ctx context.Context, keyword string) ([]*tea
|
||||
appCount[p.Team]++
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
outList := utils.SliceToSlice(list, func(s *team.Team) *team_dto.SimpleTeam {
|
||||
return &team_dto.SimpleTeam{
|
||||
Id: s.Id,
|
||||
@@ -216,7 +228,7 @@ func (m *imlTeamModule) AddMember(ctx context.Context, id string, uuids ...strin
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...string) error {
|
||||
@@ -224,7 +236,7 @@ func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...st
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
supperRole, err := m.roleService.GetSupperRole(ctx, role.GroupTeam)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -244,12 +256,12 @@ func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...st
|
||||
supperRoleCount++
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if supperRoleCount == int(count) {
|
||||
return errors.New("can not delete all team admin")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return m.transaction.Transaction(ctx, func(ctx context.Context) error {
|
||||
err = m.roleMemberService.RemoveUserRole(ctx, role.TeamTarget(id), uuids...)
|
||||
if err != nil {
|
||||
@@ -257,7 +269,7 @@ func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...st
|
||||
}
|
||||
return m.teamMemberService.RemoveMemberFrom(ctx, id, uuids...)
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
func (m *imlTeamModule) Members(ctx context.Context, id string, keyword string) ([]*team_dto.Member, error) {
|
||||
@@ -286,12 +298,12 @@ func (m *imlTeamModule) Members(ctx context.Context, id string, keyword string)
|
||||
roleMemberMap := utils.SliceToMapArrayO(roleMembers, func(r *role.Member) (string, string) {
|
||||
return r.User, r.Role
|
||||
})
|
||||
|
||||
uId := utils.UserId(ctx)
|
||||
out := make([]*team_dto.Member, 0, len(members))
|
||||
for _, member := range members {
|
||||
out = append(out, team_dto.ToMember(member, roleMemberMap[member.UID]...))
|
||||
out = append(out, team_dto.ToMember(member, uId, roleMemberMap[member.UID]...))
|
||||
}
|
||||
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
@@ -331,20 +343,20 @@ func (m *imlTeamModule) SimpleMembers(ctx context.Context, id string, keyword st
|
||||
}
|
||||
departmentMemberMap[member.UID] = append(departmentMemberMap[member.UID], member.Come)
|
||||
}
|
||||
|
||||
|
||||
out := make([]*team_dto.SimpleMember, 0, len(teamMembers))
|
||||
for _, member := range teamMembers {
|
||||
u, ok := userMap[member.UID]
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
out = append(out, &team_dto.SimpleMember{
|
||||
User: auto.UUID(u.UID),
|
||||
Mail: u.Email,
|
||||
Department: auto.List(departmentMemberMap[member.UID]),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user