2.4. [$dn] 宏示例
[$dn] 宏检查目标源的 DN 多次。这个宏会丢弃每个迭代最多的 RDN 组件,直到找到匹配项。
例如,您在 cn=all,ou=groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com 子树中使用目标的 LDAP 请求:
aci: (target="ldap:///ou=groups,($dn),dc=example,dc=com")
(targetattr = "*") (version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
宏展开,如下所示:
-
目标中的
($dn)与dc=subdomain1,dc=hostedCompany1匹配。 主体中的
[$dn]的替换为dc=subdomain1,dc=hostedCompany1。结果为
groupdn="ldap:///cn=domainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"。如果绑定 DN 是该组的成员,则匹配的进程会停止,并且评估 ACI。如果结果不匹配,该过程将继续并丢弃最左边的部分。主题中的 [$dn] 是
dc=hostedCompany1。结果为
groupdn="ldap:///cn=domainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com"。如果绑定 DN 不是该组的成员,则不会评估 ACI。如果是一个成员,则评估 ACI。
[$dn] 宏将对域级别管理员的访问权限授予目录树中的所有子域。它可用于表达域之间的分层关系。例如,请考虑以下 ACI:
aci: (target="ldap:///ou=*, ($dn),dc=example,dc=com")
(targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
(version 3.0; acl "Domain access"; allow (read,search)
groupdn="ldap:///cn=domainAdmins,ou=groups,[$dn],dc=example,dc=com";)
此 ACI 将 cn=domainAdmins,ou=groups,dc=hostedCompany1,dc=example,dc=com 的访问权限授予 dc=hostedCompany1 下的所有子域。属于该组成员的管理员可以访问 ou=body,dc=subdomain1.1,dc=subdomain1 等子树。但是 cn=domainAdmins,ou=groups,dc=subdomain1.1 的成员无法访问 ou=body,dc=hostedCompany1 和 ou=body,dc=subdomain1,dc=hostedCompany1 节点。