ldap-1-backend/service/ildap/group_ildap.go

115 lines
2.9 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 ildap
import (
"errors"
"github.com/eryajf/go-ldap-admin/config"
"github.com/eryajf/go-ldap-admin/model"
"github.com/eryajf/go-ldap-admin/public/common"
ldap "github.com/go-ldap/ldap/v3"
)
type GroupService struct{}
// Add 添加资源
func (x GroupService) Add(g *model.Group) error { //organizationalUnit
if g.Remark == "" {
g.Remark = g.GroupName
}
add := ldap.NewAddRequest(g.GroupDN, nil)
if g.GroupType == "ou" {
add.Attribute("objectClass", []string{"organizationalUnit", "top"}) // 如果定义了 groupOfNAmes那么必须指定member否则报错如下object class 'groupOfNames' requires attribute 'member'
}
if g.GroupType == "cn" {
add.Attribute("objectClass", []string{"groupOfUniqueNames", "top"})
add.Attribute("uniqueMember", []string{config.Conf.Ldap.AdminDN}) // 所以这里创建组的时候默认将admin加入其中以免创建时没有人员而报上边的错误
}
add.Attribute(g.GroupType, []string{g.GroupName})
add.Attribute("description", []string{g.Remark})
// 获取 LDAP 连接
conn, err := common.GetLDAPConn()
defer common.PutLADPConn(conn)
if err != nil {
return err
}
return conn.Add(add)
}
// UpdateGroup 更新一个分组
func (x GroupService) Update(oldGroup, newGroup *model.Group) error {
modify := ldap.NewModifyRequest(oldGroup.GroupDN, nil)
modify.Replace("description", []string{newGroup.Remark})
// 获取 LDAP 连接
conn, err := common.GetLDAPConn()
defer common.PutLADPConn(conn)
if err != nil {
return err
}
err = conn.Modify(modify)
if err != nil {
return err
}
// 如果配置文件允许修改分组名称,且分组名称发生了变化,那么执行修改分组名称
if config.Conf.Ldap.GroupNameModify && newGroup.GroupName != oldGroup.GroupName {
modify := ldap.NewModifyDNRequest(oldGroup.GroupDN, newGroup.GroupDN, true, "")
err := conn.ModifyDN(modify)
if err != nil {
return err
}
}
return nil
}
// Delete 删除资源
func (x GroupService) Delete(gdn string) error {
del := ldap.NewDelRequest(gdn, nil)
// 获取 LDAP 连接
conn, err := common.GetLDAPConn()
defer common.PutLADPConn(conn)
if err != nil {
return err
}
return conn.Del(del)
}
// AddUserToGroup 添加用户到分组
func (x GroupService) AddUserToGroup(dn, udn string) error {
//判断dn是否以ou开头
if dn[:3] == "ou=" {
return errors.New("不能添加用户到OU组织单元")
}
newmr := ldap.NewModifyRequest(dn, nil)
newmr.Add("uniqueMember", []string{udn})
// 获取 LDAP 连接
conn, err := common.GetLDAPConn()
defer common.PutLADPConn(conn)
if err != nil {
return err
}
return conn.Modify(newmr)
}
// DelUserFromGroup 将用户从分组删除
func (x GroupService) RemoveUserFromGroup(gdn, udn string) error {
newmr := ldap.NewModifyRequest(gdn, nil)
newmr.Delete("uniqueMember", []string{udn})
// 获取 LDAP 连接
conn, err := common.GetLDAPConn()
defer common.PutLADPConn(conn)
if err != nil {
return err
}
return conn.Modify(newmr)
}