2014-03-02 34 views
1

我是新来的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)。在这一点上,我找不到解决这个问题的任何例子。是什么在我脑海中的解决方案是:

  1. 将查询发送到数据库中检索用户被分配到各组通过执行(&(objectclass=groupOfUniqueNames)(uniqueMember=uid=sspielberg,ou=Users,dc=example,dc=com))
  2. ,解析组dn(即拆分并删除第一条记录在阵列中)
  3. 查找而parentGroup objectClass == groupOfUniqueNames

虽然这可能是工作的父母,我不觉得这是正确的。我想知道是否有更好的方法来实现相同的结果?在大多数LDAP服务器实现(AD除外,因为他们有解决这个问题的解决方案)的情况下,这种情况被认为是best practice?此外,请您提供一个简单的示例代码或与此问题的可能解决方案的链接?

回答

0

如果用户是多个组的成员,则应通过组的'uniqueMember'属性中DN的出现直接表示每个组。这也适用于父母组织。不要使用结构上的DIT来表达群体组,从而使你的生活复杂化。所以你需要的是(1)在你的列表中。

或者,Employee应该是一组组,并且其成员应该是Director,Actor等,因此,当您检索用户的直接成员资格(如Actor)时,您将开始一个递归操作,找到这些组的组员工,如员工,添加它们,冲洗并重复。这可以在大约五行代码中完成。