ldap 组织结构如何转成多叉树?

简介: 工作中,ldap 服务器的对接,可以能会涉及到同步组织结构,认证,认证后处理等等,最近认证还不是我想写的刚需,继续来看看对于组织结构的想法

工作中,ldap 服务器的对接,可以能会涉及到同步组织结构,认证,认证后处理等等,最近认证还不是我想写的刚需,继续来看看对于组织结构的想法

例如同步 AD 域的组织结构,或者是 ldap 协议的其他产品对应的企业组织结构,如下我简单的创建的一些 ou 和 cn

image.png

查看当前 ldap 组织结构

我们通过命令查看 ldap 服务器上的组织结构数据,咱们只查看 DN 即可,不需要其他的属性

shell

复制代码

# ldapsearch -x -LLL -b dc=xiaomotong,dc=com objectClass=* d:

image.png

我们可以看到,ldap 服务器给我们返回的数据中,是 1 个 list ,这个list 里面每 1 个元素是 1 个 entry,是 1 条记录,也是 1 个唯一的标识

那么问题就很明确了,如何将上述的 dn list ,转成 1 棵树呢?

我们可以根据上述打印结果画图,进行分析一下

先画一棵树

根据上面的打印结果,在和实际ldap admin 可视化工具中可以看出,根实际是在最后 dc=xiaomotong,dc=com,然后从右往左 分别是 ou,cn

前 5 条数据对应画出来的图是这样的:

image.png

看上去有戏,继续往下画看看效果:

  • 红色框为 ou
  • 绿色框为 dc
  • 蓝色框为 cn

image.png

对就是这样的一棵树,画出来了,可是我们如何用代码实现一下呢?

编码实现

编码实现将 ldif 格式的数据转成树,并用 json 的方式输出,查看效果

实现方式

1、遍历每一条 entry

2、处理每一条 entry 的时候,从右到左获取相应的 rdn(对应的键和值),并给每一个 rdn 创建一个 多叉树的 节点

3、basedn 对应的节点 和 每一个 ou 对应的节点地址,存放到一个 map(key 是 string,value 是节点的地址) 中便于后续遍历处理其他 entry 的时候,直接通过 ou 名字获取对应节点地址即可

4、对于一个节点下面的用户,直接挂到这个节点上即可

画个图来阐述一下 map 的作用:

例如我们需要画一个组织结构,先画根节点

image.png

现在我们要遍历对应的 entry,例如:

  • cn=B,dc=A
  • ou=C,dc=A
  • ou=D,dc=A

需要画上 B,C,D ,我们分别创建好对应的节点,但是如何挂到 A上面去的呢?这个时候,是不是就需要 A 的地址了,正好这个 entry 又能获取到 A 的名字,也就是 map 的key,这样子,我们就可以获取到 A 的地址了

image.png

继续解析 entry

  • ou=E,ou=C,dc=A
  • cn=F,ou=E,ou=C,dc=A

原理同上

image.png

通过上面的简图,算是可以将 ldap 的 ldif 格式的数据,转换成我们想要的树了,思路是有了,编码的话就很快了 具体编码可以看下一篇

学习所得,如有偏差,还请不吝赐教


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
Cloud Native 容器
ldif 数据转成正确的组织结构再探
ldif 数据转成正确的组织结构再探
|
6月前
|
项目管理
项目管理问题之这是否意味着破坏了“聚合根思想”
项目管理问题之这是否意味着破坏了“聚合根思想”
|
6月前
|
前端开发 数据挖掘
字节面试:领域、子域、核心域、通用域和支撑域怎么划分?
领域驱动设计(DDD)通过划分业务领域和子域简化复杂性。领域是业务问题的范围,子域是更小的专业部分。核心域代表业务的核心竞争力,如电商中的商品、订单和支付;通用域提供跨领域服务,如用户管理;支撑域支持核心功能,如物流、客服和数据分析。这种划分帮助团队专注关键业务,提高开发效率和软件对业务需求的契合度。
271 0
|
8月前
|
存储 安全 C#
C#使用集合组织相关数据
C#使用集合组织相关数据
|
JSON Cloud Native 数据可视化
ldap 组织结构如何转成多叉树?
ldap 组织结构如何转成多叉树?
|
8月前
【代数学习题3】从零理解数域扩张与嵌入 —— 同构、商环、分裂域与同态映射
【代数学习题3】从零理解数域扩张与嵌入 —— 同构、商环、分裂域与同态映射
443 0
|
SQL 前端开发 Java
java实现多层级目录树详解
java实现多层级目录树详解
487 0
|
算法 C++
数据结构上机实践第八周项目1- 建立顺序串的算法库
数据结构上机实践第八周项目1- 建立顺序串的算法库
176 0
数据结构上机实践第八周项目1- 建立顺序串的算法库
|
存储
串的存储结构 --王道
目录 一、串的顺序存储 1、静态数组实现(定长顺序存储) 2、动态数组实现(堆分配存储) 3、存储方案​编辑 4、串的链式存储 5、基本操作的实现 6、求子串的实现方式 7、比较俩个串的大小 8、定位操作
242 0
串的存储结构 --王道
|
XML 存储 JSON
多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)
如何将数据库中的层次数据转换成对应的层次结构的JSON或XML格式的字符串,返回给客户端的JavaScript树形组件?这就是我们要解决的关键技术问题。
多叉树结合JavaScript树形组件实现无限级树形结构(一种构建多级有序树形结构JSON(或XML)数据源的方法)