我是新来的LDAP协议和服务器,所以请原谅我,如果我问另一个微不足道的问题。假设我有以下带有嵌套组的LDAP DIT。什么被认为是遍历LDAP DIT的正确方法?
dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example
# Create a place where users are stored
dn: ou=Users, dc=example, dc=com
ou: Users
description: All strongbox users.
objectclass: organizationalUnit
# Create users
dn: uid=tcruise,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: tcruise
cn: Tom Cruise
mail: [email protected]
givenName: Tom
surname: Cruise
userPassword: password
dn: uid=sspielberg,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: sspielberg
cn: Steven Spielberg
mail: [email protected]
givenName: Steven
surname: Spielberg
userPassword: password
# Create groups
dn: ou=Groups, dc=example, dc=com
ou: Groups
description: Base group organization unit.
objectClass: organizationalUnit
# Employees
dn: ou=Employees, ou=Groups, dc=example, dc=com
ou: Employees
cn: Employees
description: All employees
objectClass: groupOfUniqueNames
uniqueMember: cn=NULL
# Employees (Actors)
dn: ou=Actors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Actors
cn: Actors
description: All actors
objectClass: groupOfUniqueNames
uniqueMember: uid=tcruise,ou=Users,dc=example,dc=com
# Employees (Directors)
dn: ou=Directors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Directors
cn: Directors
description: All directors
objectClass: groupOfUniqueNames
uniqueMember: uid=sspielberg,ou=Users,dc=example,dc=com
在该示例中的用户可以被分配到多个组,每个组具有特定的授权级别。因此,我需要获取用户分配到的所有组以及他们的父组(即tcruise - Actors, Employees
)。在这一点上,我找不到解决这个问题的任何例子。是什么在我脑海中的解决方案是:
- 将查询发送到数据库中检索用户被分配到各组通过执行
(&(objectclass=groupOfUniqueNames)(uniqueMember=uid=sspielberg,ou=Users,dc=example,dc=com))
- 由
,
解析组dn
(即拆分并删除第一条记录在阵列中) - 查找而
parentGroup objectClass == groupOfUniqueNames
虽然这可能是工作的父母,我不觉得这是正确的。我想知道是否有更好的方法来实现相同的结果?在大多数LDAP服务器实现(AD除外,因为他们有解决这个问题的解决方案)的情况下,这种情况被认为是best practice
?此外,请您提供一个简单的示例代码或与此问题的可能解决方案的链接?