refactor: config + lldaplib 收敛到 LLDAP 形态(读只读、删 OpenLDAP 写路径与密码包)
- config 重写:删 user-ou/inactive-ou/group-root-* / group-object-class / group-member-attr / initial-password;新增 lldap 写通道 + webhook + confirm-base-url + 两套 schedule + guard - ldaplib 收拢为只读:属性常量/DN 归入 attrs.go;删 ops.go 写路径与 internal/password - config.example.yml 重写成 LLDAP 形态 - 组命名修订(呼应 AGENTS.md 约束12):用部门稳定索引 cn=<dept_id> 做组身份, mirror_departments 增 group_id 列并跨快照保留,可读中文名只走 DB 展示
This commit is contained in:
@@ -4,8 +4,9 @@ package mapping
|
||||
//
|
||||
// 与旧 `Build(feishu.Snapshot)`(OpenLDAP 单阶段时代的嵌套 CN + inactive OU 模型)
|
||||
// 不同,这里是目标架构的映射:输入是 SQLite 镜像的活动用户与活动部门,输出是
|
||||
// 期望写入 LLDAP 的纯函数状态。LLDAP 组不能嵌套,因此组用拍平拼音点分命名;
|
||||
// 用户 DN 固定挂在 ou=people 下,离职不靠 DN 移动而是物理删除(见 syncer 阶段 6)。
|
||||
// 期望写入 LLDAP 的纯函数状态。LLDAP 组不能嵌套,组用部门稳定索引命名
|
||||
// (cn=<dept_id>);用户 DN 固定挂在 ou=people 下,离职不靠 DN 移动而是
|
||||
// 物理删除(见 syncer 阶段 6)。可读的部门中文名不进组名,只作展示。
|
||||
|
||||
import (
|
||||
"sort"
|
||||
@@ -15,14 +16,13 @@ import (
|
||||
"idsync/internal/store"
|
||||
)
|
||||
|
||||
// DesiredGroup 是期望的分组(拍平命名)。
|
||||
// DesiredGroup 是期望的分组(用部门稳定索引命名)。
|
||||
type DesiredGroup struct {
|
||||
DeptID string
|
||||
// DN 是完整组 DN(来自 mirror_departments,形式 cn=<父.子>,ou=groups,<base>)。
|
||||
// DN 是完整组 DN(来自 mirror_departments,形式 cn=<dept_id>,ou=groups,<base>)。
|
||||
DN string
|
||||
// Chain 是拍平拼音链,仅展示用。
|
||||
Chain string
|
||||
Name string
|
||||
// Name 是部门中文名,仅展示用。
|
||||
Name string
|
||||
// Level 是部门在树中的层级,用于保证父组先于子组创建。
|
||||
Level int
|
||||
// Members 是期望成员的用户 DN 集合。
|
||||
@@ -72,7 +72,6 @@ func BuildFromMirror(users []*store.MirrorUser, depts []*store.MirrorDepartment,
|
||||
g := &DesiredGroup{
|
||||
DeptID: d.DeptID,
|
||||
DN: d.DN,
|
||||
Chain: d.PinyinName,
|
||||
Name: d.Name,
|
||||
Level: d.Level,
|
||||
Members: make(map[string]struct{}),
|
||||
|
||||
Reference in New Issue
Block a user