乐趣区

关于go:ldap-组织结构如何转成多叉树

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

例如同步 AD 域的组织构造,或者是 ldap 协定的其余产品对应的企业组织构造,如下我简略的创立的一些 ou 和 cn

查看以后 ldap 组织构造

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

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

咱们能够看到,ldap 服务器给咱们返回的数据中,是 1 个 list,这个 list 外面每 1 个元素是 1 个 entry,是 1 条记录,也是 1 个惟一的标识

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

咱们能够根据上述打印后果画图,进行剖析一下

先画一棵树

依据下面的打印后果,在和理论 ldap admin 可视化工具 中能够看出,根理论是在最初 dc=xiaomotong,dc=com,而后从右往左 别离是 ou,cn

前 5 条数据对应画进去的图是这样的:

看上去有戏,持续往下画看看成果:

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

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

编码实现

编码实现将 ldif 格局的数据转成树,并用 json 的形式输入,查看成果

实现形式

1、遍历每一条 entry

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

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

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

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

例如咱们须要画一个组织构造,先画根节点

当初咱们要遍历对应的 entry,例如:

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

须要画上 B,C,D,咱们别离创立好对应的节点,然而如何挂到 A 下面去的呢?这个时候,是不是就须要 A 的地址了,正好这个 entry 又能获取到 A 的名字,也就是 map 的 key,这样子,咱们就能够获取到 A 的地址了

持续解析 entry

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

原理同上

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

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

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

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

退出移动版