Skip to content

Commit 4e8c57a

Browse files
authored
fix: 修复自动任务会删除中间关系的问题 (#157)
1 parent a026d93 commit 4e8c57a

File tree

4 files changed

+48
-19
lines changed

4 files changed

+48
-19
lines changed

.pre-commit-config.yaml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
repos:
2+
- repo: https://github.com/pre-commit/pre-commit-hooks
3+
rev: v3.1.0
4+
hooks:
5+
- id: check-yaml
6+
- id: trailing-whitespace
7+
- id: check-added-large-files
8+
- repo: https://github.com/golangci/golangci-lint # golangci-lint hook repo
9+
rev: v1.47.3 # golangci-lint hook repo revision
10+
hooks:
11+
- id: golangci-lint
12+
name: golangci-lint
13+
description: Fast linters runner for Go.
14+
entry: golangci-lint run --fix
15+
types: [go]
16+
language: golang
17+
pass_filenames: false

logic/sqlToLdap_login.go

+21-19
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414

1515
type SqlLogic struct{}
1616

17-
// 同步sql的用户信息到ldap
17+
// SyncSqlUsers 同步sql的用户信息到ldap
1818
func (d *SqlLogic) SyncSqlUsers(c *gin.Context, req interface{}) (data interface{}, rspError interface{}) {
1919
r, ok := req.(*request.SyncSqlUserReq)
2020
if !ok {
@@ -50,8 +50,7 @@ func (d *SqlLogic) SyncSqlUsers(c *gin.Context, req interface{}) (data interface
5050
return nil, tools.NewMySqlError(fmt.Errorf("向Ldap添加用户到分组关系失败:" + err.Error()))
5151
}
5252
}
53-
user.SyncState = 1
54-
err = isql.User.Update(&user)
53+
err = isql.User.ChangeSyncState(int(user.ID), 1)
5554
if err != nil {
5655
return nil, tools.NewLdapError(fmt.Errorf("用户同步完毕之后更新状态失败:" + err.Error()))
5756
}
@@ -60,7 +59,7 @@ func (d *SqlLogic) SyncSqlUsers(c *gin.Context, req interface{}) (data interface
6059
return nil, nil
6160
}
6261

63-
// 同步sql中的分组信息到ldap
62+
// SyncSqlGroups 同步sql中的分组信息到ldap
6463
func (d *SqlLogic) SyncSqlGroups(c *gin.Context, req interface{}) (data interface{}, rspError interface{}) {
6564
r, ok := req.(*request.SyncSqlGrooupsReq)
6665
if !ok {
@@ -95,8 +94,7 @@ func (d *SqlLogic) SyncSqlGroups(c *gin.Context, req interface{}) (data interfac
9594
}
9695
}
9796
}
98-
group.SyncState = 1
99-
err = isql.Group.Update(group)
97+
err = isql.Group.ChangeSyncState(int(group.ID), 1)
10098
if err != nil {
10199
return nil, tools.NewLdapError(fmt.Errorf("分组同步完毕之后更新状态失败:" + err.Error()))
102100
}
@@ -105,7 +103,7 @@ func (d *SqlLogic) SyncSqlGroups(c *gin.Context, req interface{}) (data interfac
105103
return nil, nil
106104
}
107105

108-
// 检索未同步到ldap中的分组
106+
// SearchGroupDiff 检索未同步到ldap中的分组
109107
func SearchGroupDiff() (err error) {
110108
// 获取sql中的数据
111109
var sqlGroupList []*model.Group
@@ -125,13 +123,12 @@ func SearchGroupDiff() (err error) {
125123
if group.GroupDN == config.Conf.Ldap.BaseDN {
126124
continue
127125
}
128-
group.SyncState = 2
129-
err = isql.Group.Update(group)
126+
err = isql.Group.ChangeSyncState(int(group.ID), 2)
130127
}
131128
return
132129
}
133130

134-
// 检索未同步到ldap中的用户
131+
// SearchUserDiff 检索未同步到ldap中的用户
135132
func SearchUserDiff() (err error) {
136133
// 获取sql中的数据
137134
var sqlUserList []*model.User
@@ -148,34 +145,39 @@ func SearchUserDiff() (err error) {
148145
// 比对两个系统中的数据
149146
users := diffUser(sqlUserList, ldapUserList)
150147
for _, user := range users {
151-
user.SyncState = 2
152-
err = isql.User.Update(user)
148+
if user.UserDN == config.Conf.Ldap.AdminDN {
149+
continue
150+
}
151+
err = isql.User.ChangeSyncState(int(user.ID), 2)
153152
}
154153
return
155154
}
156155

157-
func diffGroup(a, b []*model.Group) (rst []*model.Group) {
156+
// diffGroup 比较出sql中有但ldap中没有的group列表
157+
func diffGroup(sqlGroup, ldapGroup []*model.Group) (rst []*model.Group) {
158158
var tmp = make(map[string]struct{}, 0)
159159

160-
for _, v := range b {
160+
for _, v := range ldapGroup {
161161
tmp[v.GroupDN] = struct{}{}
162162
}
163163

164-
for _, v := range a {
164+
for _, v := range sqlGroup {
165165
if _, ok := tmp[v.GroupDN]; !ok {
166166
rst = append(rst, v)
167167
}
168168
}
169169
return
170170
}
171-
func diffUser(a, b []*model.User) (rst []*model.User) {
172-
var tmp = make(map[string]struct{}, len(a))
173171

174-
for _, v := range b {
172+
// diffUser 比较出sql中有但ldap中没有的user列表
173+
func diffUser(sqlUser, ldapUser []*model.User) (rst []*model.User) {
174+
var tmp = make(map[string]struct{}, len(sqlUser))
175+
176+
for _, v := range ldapUser {
175177
tmp[v.UserDN] = struct{}{}
176178
}
177179

178-
for _, v := range a {
180+
for _, v := range sqlUser {
179181
if _, ok := tmp[v.UserDN]; !ok {
180182
rst = append(rst, v)
181183
}

service/isql/group_isql.go

+5
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ func (s GroupService) Update(dataObj *model.Group) error {
9595
return common.DB.Model(dataObj).Where("id = ?", dataObj.ID).Updates(dataObj).Error
9696
}
9797

98+
// ChangeSyncState 更新分组的同步状态
99+
func (s GroupService) ChangeSyncState(id, status int) error {
100+
return common.DB.Model(&model.Group{}).Where("id = ?", id).Update("sync_state", status).Error
101+
}
102+
98103
// Find 获取单个资源
99104
func (s GroupService) Find(filter map[string]interface{}, data *model.Group, args ...interface{}) error {
100105
return common.DB.Where(filter, args).Preload("Users").First(&data).Error

service/isql/user_isql.go

+5
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,11 @@ func (s UserService) ChangeStatus(id, status int) error {
269269
return common.DB.Model(&model.User{}).Where("id = ?", id).Update("status", status).Error
270270
}
271271

272+
// ChangeSyncState 更新用户的同步状态
273+
func (s UserService) ChangeSyncState(id, status int) error {
274+
return common.DB.Model(&model.User{}).Where("id = ?", id).Update("sync_state", status).Error
275+
}
276+
272277
// GetCurrentLoginUser 获取当前登录用户信息
273278
// 需要缓存,减少数据库访问
274279
func (s UserService) GetCurrentLoginUser(c *gin.Context) (model.User, error) {

0 commit comments

Comments
 (0)