Skip to content

Commit 02638f2

Browse files
authored
feat: 修复parentid为0值的问题;补充启动时的初始化数据;用户密码加密类型可配置化 (#307)
1 parent d00d6df commit 02638f2

File tree

6 files changed

+84
-13
lines changed

6 files changed

+84
-13
lines changed

config.yml

+2
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ ldap:
107107
group-name-modify: false
108108
# 是否允许更改用户DN
109109
user-name-modify: false
110+
# 用户密码加密方式 默认为 ssha 还可指定为 clear(表示不加密)
111+
user-password-encryption-type: "ssha"
110112
# 默认邮箱后缀
111113
default-email-suffix: "eryajf.net"
112114
# 📢 即便用不到如下三段配置信息,也不要删除,否则会有一些奇怪的错误出现

config/config.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -140,16 +140,17 @@ type RateLimitConfig struct {
140140
}
141141

142142
type LdapConfig struct {
143-
Url string `mapstructure:"url" json:"url"`
144-
MaxConn int `mapstructure:"max-conn" json:"maxConn"`
145-
BaseDN string `mapstructure:"base-dn" json:"baseDN"`
146-
AdminDN string `mapstructure:"admin-dn" json:"adminDN"`
147-
AdminPass string `mapstructure:"admin-pass" json:"adminPass"`
148-
UserDN string `mapstructure:"user-dn" json:"userDN"`
149-
UserInitPassword string `mapstructure:"user-init-password" json:"userInitPassword"`
150-
GroupNameModify bool `mapstructure:"group-name-modify" json:"groupNameModify"`
151-
UserNameModify bool `mapstructure:"user-name-modify" json:"userNameModify"`
152-
DefaultEmailSuffix string `mapstructure:"default-email-suffix" json:"defaultEmailSuffix"`
143+
Url string `mapstructure:"url" json:"url"`
144+
MaxConn int `mapstructure:"max-conn" json:"maxConn"`
145+
BaseDN string `mapstructure:"base-dn" json:"baseDN"`
146+
AdminDN string `mapstructure:"admin-dn" json:"adminDN"`
147+
AdminPass string `mapstructure:"admin-pass" json:"adminPass"`
148+
UserDN string `mapstructure:"user-dn" json:"userDN"`
149+
UserInitPassword string `mapstructure:"user-init-password" json:"userInitPassword"`
150+
GroupNameModify bool `mapstructure:"group-name-modify" json:"groupNameModify"`
151+
UserNameModify bool `mapstructure:"user-name-modify" json:"userNameModify"`
152+
DefaultEmailSuffix string `mapstructure:"default-email-suffix" json:"defaultEmailSuffix"`
153+
UserPasswordEncryptionType string `mapstructure:"user-password-encryption-type" json:"userPasswordEncryptionType"`
153154
}
154155
type EmailConfig struct {
155156
Host string `mapstructure:"host" json:"host"`

docs/docker-compose/config/init.ldif

+7-1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,10 @@ dn: ou=feishuroot,dc=eryajf,dc=net
1919
ou: feishuroot
2020
description: 飞书根部门
2121
objectClass: top
22-
objectClass: organizationalUnit
22+
objectClass: organizationalUnit
23+
24+
dn: cn=group,dc=eryajf,dc=net
25+
cn: group
26+
description: 默认分组
27+
objectClass: top
28+
objectClass: groupOfUniqueNames

model/request/menu_req.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type MenuUpdateReq struct {
3838
AlwaysShow uint `json:"alwaysShow" validate:"oneof=1 2"`
3939
Breadcrumb uint `json:"breadcrumb" validate:"oneof=1 2"`
4040
ActiveMenu string `json:"activeMenu" validate:"min=0,max=100"`
41-
ParentId uint `json:"parentId" validate:"required"`
41+
ParentId uint `json:"parentId" validate:"gte=0"`
4242
}
4343

4444
// MenuDeleteReq 删除资源结构体

public/common/init_mysql_data.go

+56
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/eryajf/go-ldap-admin/public/tools"
1010

1111
"github.com/thoas/go-funk"
12+
"gorm.io/datatypes"
1213
"gorm.io/gorm"
1314
)
1415

@@ -760,6 +761,18 @@ func InitData() {
760761
SourceDeptParentId: fmt.Sprintf("%s_%d", config.Conf.FeiShu.Flag, 0),
761762
GroupDN: fmt.Sprintf("ou=%s,%s", config.Conf.FeiShu.Flag+"root", config.Conf.Ldap.BaseDN),
762763
},
764+
{
765+
Model: gorm.Model{ID: 5},
766+
GroupName: "group",
767+
Remark: "默认分组",
768+
Creator: "system",
769+
GroupType: "cn",
770+
ParentId: 1,
771+
SourceDeptId: "platform_0",
772+
Source: "platform",
773+
SourceDeptParentId: "openldap_1",
774+
GroupDN: fmt.Sprintf("cn=%s,%s", "group", config.Conf.Ldap.BaseDN),
775+
},
763776
}
764777

765778
for _, group := range groups {
@@ -774,4 +787,47 @@ func InitData() {
774787
Log.Errorf("写入分组数据失败:%v", err)
775788
}
776789
}
790+
791+
// 7.写入关系管理
792+
filedRelation := []model.FieldRelation{
793+
{
794+
Flag: "dingtalk_group",
795+
Attributes: datatypes.JSON(`{"groupName":"custom_name_pinyin","remark":"name","sourceDeptId":"id","sourceDeptParentId":"parentid"}`),
796+
},
797+
{
798+
Flag: "dingtalk_user",
799+
Attributes: datatypes.JSON(`{"avatar":"avatar","givenName":"name","introduction":"remark","jobNumber":"job_number","mail":"email","mobile":"mobile","nickname":"name","position":"title","postalAddress":"work_place","sourceUnionId":"unionid","sourceUserId":"userid","username":"custom_name_pinyin"}`),
800+
},
801+
{
802+
Flag: "feishu_group",
803+
Attributes: datatypes.JSON(`{"groupName":"custom_name_pinyin","remark":"name","sourceDeptId":"open_department_id","sourceDeptParentId":"parent_department_id"}`),
804+
},
805+
{
806+
Flag: "feishu_user",
807+
Attributes: datatypes.JSON(`{"avatar":"avatar","givenName":"name","introduction":"name","jobNumber":"employee_no","mail":"email","mobile":"mobile","nickname":"name","position":"job_title","postalAddress":"work_station","sourceUnionId":"union_id","sourceUserId":"user_id","username":"custom_name_pinyin"}`),
808+
},
809+
{
810+
Flag: "wecom_group",
811+
Attributes: datatypes.JSON(`{"groupName":"custom_name_pinyin","remark":"name","sourceDeptId":"parentid","sourceDeptParentId":"id"}`),
812+
},
813+
{
814+
Flag: "wecom_user",
815+
Attributes: datatypes.JSON(`{"avatar":"avatar","givenName":"alias","introduction":"name","jobNumber":"mobile","mail":"email","mobile":"mobile","nickname":"name","position":"external_position","postalAddress":"address","sourceUnionId":"userid","sourceUserId":"userid","username":"custom_name_pinyin"}`),
816+
},
817+
}
818+
819+
newFieldRelations := make([]model.FieldRelation, 0)
820+
for i, newFieldRelation := range filedRelation {
821+
newFieldRelation.ID = uint(i + 1)
822+
err := DB.First(&newFieldRelation, newFieldRelation.ID).Error
823+
if errors.Is(err, gorm.ErrRecordNotFound) {
824+
newFieldRelations = append(newFieldRelations, newFieldRelation)
825+
}
826+
}
827+
828+
if len(newFieldRelations) > 0 {
829+
if err := DB.Create(&newFieldRelations).Error; err != nil {
830+
Log.Errorf("写入关系数据失败:%v", err)
831+
}
832+
}
777833
}

service/ildap/user_ildap.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@ func (x UserService) Add(user *model.User) error {
2929
add.Attribute("postalAddress", []string{user.PostalAddress})
3030
add.Attribute("mobile", []string{user.Mobile})
3131
add.Attribute("uid", []string{user.Username})
32-
add.Attribute("userPassword", []string{tools.EncodePass([]byte(tools.NewParPasswd(user.Password)))})
32+
var pass string
33+
if config.Conf.Ldap.UserPasswordEncryptionType == "clear" {
34+
pass = user.Password
35+
} else {
36+
pass = tools.EncodePass([]byte(tools.NewParPasswd(user.Password)))
37+
}
38+
add.Attribute("userPassword", []string{pass})
3339

3440
// 获取 LDAP 连接
3541
conn, err := common.GetLDAPConn()

0 commit comments

Comments
 (0)