diff --git a/server/ldap-admin/internal/logic/getldaporganizationmemberslogic.go b/server/ldap-admin/internal/logic/getldaporganizationmemberslogic.go index 8a88fa90..675333c4 100644 --- a/server/ldap-admin/internal/logic/getldaporganizationmemberslogic.go +++ b/server/ldap-admin/internal/logic/getldaporganizationmemberslogic.go @@ -59,6 +59,7 @@ func (l *GetLdapOrganizationMembersLogic) GetLdapOrganizationMembers(req *types. //遍历成员提取cn用于从用户基础组中获取用户信息列表 filterBuilder := strings.Builder{} memberCount := 0 + memberDNList := make([]string, 0, 100) for _, entry := range result.Entries { if entry.DN != req.OrganizationDN { continue @@ -69,6 +70,7 @@ func (l *GetLdapOrganizationMembersLogic) GetLdapOrganizationMembers(req *types. continue } memberCount = len(attr.Values) + memberDNList = attr.Values for _, memberDn := range attr.Values { //不需要根用户 if memberDn == l.svcCtx.Config.Ldap.RootDN { @@ -91,6 +93,7 @@ func (l *GetLdapOrganizationMembersLogic) GetLdapOrganizationMembers(req *types. return resp.SetStatusWithMessage(basic.CodeServiceErr, "查询ldap帐号信息失败,"+err.Error()) } list := make([]types.GetLdapOrganizationMembersItem, 0, memberCount) + mapUser := make(map[string]struct{}) for _, user := range userList { if user.Status != 1 { //从部门member中移出 @@ -99,6 +102,7 @@ func (l *GetLdapOrganizationMembersLogic) GetLdapOrganizationMembers(req *types. } continue } + mapUser[user.UserDN] = struct{}{} list = append(list, types.GetLdapOrganizationMembersItem{ UserId: user.UserId, UserDN: user.UserDN, @@ -110,6 +114,16 @@ func (l *GetLdapOrganizationMembersLogic) GetLdapOrganizationMembers(req *types. Status: user.Status, }) } + //把通讯录中没有的也删除 + for _, memberDN := range memberDNList { + if _, ok := mapUser[memberDN]; ok { + continue + } + //从组织中移除没有帐号的用户 + if err = l.svcCtx.Ldap.RemoveUserFromOrganization(req.OrganizationDN, memberDN); err != nil { + logx.Error("移除用户成员失败!:", err) + } + } return resp.SetStatusWithMessage(basic.CodeOK, "success", types.GetLdapOrganizationMembersRsp{ List: list, })