fusenapi/server/ldap-admin/internal/logic/removeldaporganizationmemberlogic.go
laodaming fdb8082095 fix
2023-11-27 14:41:10 +08:00

95 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package logic
import (
"fusenapi/utils/basic"
"fusenapi/utils/email"
"net/http"
"strings"
"context"
"fusenapi/server/ldap-admin/internal/svc"
"fusenapi/server/ldap-admin/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type RemoveLdapOrganizationMemberLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewRemoveLdapOrganizationMemberLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RemoveLdapOrganizationMemberLogic {
return &RemoveLdapOrganizationMemberLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
// 处理进入前逻辑w,r
// func (l *RemoveLdapOrganizationMemberLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) {
// }
func (l *RemoveLdapOrganizationMemberLogic) RemoveLdapOrganizationMember(req *types.RemoveLdapOrganizationMemberReq, r *http.Request) (resp *basic.Response) {
if !l.svcCtx.Ldap.VerifyAuthority(r) {
return resp.SetStatusWithMessage(basic.CodeUnAuth, "无权限,请联系管理员开通")
}
req.OrganizationDN = strings.Trim(req.OrganizationDN, " ")
req.UserDN = strings.Trim(req.UserDN, " ")
if len(req.OrganizationDN) <= 3 || req.OrganizationDN[:3] != "ou=" {
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "参数错误无效的目标组织DN")
}
if len(req.UserDN) <= 3 || req.UserDN[:3] != "cn=" {
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "参数错误无效的用户DN")
}
cnEmail := strings.Split(req.UserDN, ",")[0][3:]
if !email.IsEmailValid(cnEmail) {
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "错误的用户cn")
}
//获取组织成员列表
err := l.svcCtx.Ldap.RemoveUserFromOrganization(req.OrganizationDN, req.UserDN)
if err != nil {
logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeServiceErr, "移除成员失败,"+err.Error())
}
//获取用户信息
userInfo, err := l.svcCtx.Ldap.GetLdapUserInfo(req.UserDN)
if err != nil {
logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeServiceErr, "获取用户信息失败,"+err.Error())
}
//把属于的组织去掉
newOrganizationDNList := make([]string, 0, len(userInfo.OrganizationDNList))
for _, v := range userInfo.OrganizationDNList {
if v == req.OrganizationDN {
continue
}
newOrganizationDNList = append(newOrganizationDNList, v)
}
//如果是负责人也要把管理组织标识去掉
newManageOrganizationDNList := make([]string, 0, len(userInfo.OrganizationDNList))
for _, v := range userInfo.ManageOrganizationDNList {
if v == req.OrganizationDN {
continue
}
newManageOrganizationDNList = append(newManageOrganizationDNList, v)
}
err = l.svcCtx.Ldap.Update(req.UserDN, map[string][]string{
"departmentNumber": newOrganizationDNList, //所属组织部门
"telexNumber": newManageOrganizationDNList, //管理的部门
})
if err != nil {
logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeServiceErr, "移除成员成功,但更新用户信息失败")
}
return resp.SetStatusWithMessage(basic.CodeOK, "移除成员成功")
}
// 处理逻辑后 w,r 如:重定向, resp 必须重新处理
// func (l *RemoveLdapOrganizationMemberLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) {
// // httpx.OkJsonCtx(r.Context(), w, resp)
// }