角色是在目录管理者可以通过命令行实用程序访问的条目中定义的。创建角色之后,可按以下方式为角色指定成员:
受管理角色的成员在条目中具有 nsRoleDN 属性。
过滤角色的成员是与 nsRoleFilter 属性中所指定的过滤器相匹配的条目。
嵌套角色的成员是嵌套角色定义条目的 nsRoleDN 属性中所指定的角色的成员。
所有角色定义都是从 LDAPsubentry 和 nsRoleDefinition 对象类继承来的。以下示例显示了特定于每类角色的其他对象类和关联属性。
要为所有营销人员创建角色,请使用以下 ldapmodify 命令:
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - dn: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsSimpleRoleDefinition objectclass: nsManagedRoleDefinition cn: Marketing description: managed role for marketing staff |
请注意,nsManagedRoleDefinition 对象类是从 LDAPsubentry、nsRoleDefinition 和 nsSimpleRoleDefinition 对象类继承来的。
通过更新营销人员 Bob 的条目,可以为该成员指定角色,如下所示:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - dn: cn=Bob Arnold,ou=marketing,ou=People,dc=example,dc=com changetype: modify add: nsRoleDN nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com |
nsRoleDN 属性表示该条目是受管理角色的成员。受管理角色由角色定义的 DN 标识。要允许用户修改自己的 nsRoleDN 属性,但阻止用户添加或删除 nsManagedDisabledRole,请添加以下 ACI:
aci: (targetattr="nsRoleDN")(targattrfilters="add=nsRoleDN: (!(nsRoleDN=cn=AdministratorRole,dc=example,dc=com)), del=nsRoleDN:(!(nsRoleDN=cn=nsManagedDisabledRole,dc=example, dc=com)") (version3.0;aci "allow mod of nsRoleDN by self except for critical values"; allow(write) userdn="ldap:///self";) |
要为销售经理设置过滤角色(假定这些销售经理都具有 isManager 属性),请使用以下ldapmodify 命令:
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - dn: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsFilteredRoleDefinition cn: ManagerFilter nsRoleFilter: (isManager=True) Description: filtered role for sales managers |
请注意,nsFilteredRoleDefinition 对象类是从 LDAPsubentry、nsRoleDefinition 和 nsComplexRoleDefinition 对象类继承来的。nsRoleFilter 属性会指定一个过滤器,用于查找 ou=sales 组织中拥有下属的所有员工,例如:
$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \ -b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)" dn: cn=Carla Fuentes,ou=sales,ou=People,dc=example,dc=comcn: Carla Fuentes isManager: TRUE... nsRole: cn=ManagerFilter,ou=sales,ou=People, dc=example,dc=com |
过滤角色的过滤字符串可以基于任何属性,由 CoS 机制生成的已计算属性除外。
如果过滤角色成员是用户条目,您可以选择限制他们在角色中添加或删除自身的能力。可以使用 ACI 保护过滤属性。
嵌套在嵌套角色中的角色是通过 nsRoleDN 属性指定的。可以使用以下命令创建一个角色,该角色同时包含前面示例中所创建的营销人员和销售经理角色的成员:
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - dn: cn=MarketingSales,ou=marketing,ou=People,dc=example,dc=com objectclass: top objectclass: LDAPsubentry objectclass: nsRoleDefinition objectclass: nsComplexRoleDefinition objectclass: nsNestedRoleDefinition cn: MarketingSales nsRoleDN: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com nsRoleScopeDN: ou=sales,ou=People,dc=example,dc=com |
请注意,nsNestedRoleDefinition 对象类是从 LDAPsubentry、nsRoleDefinition 和 nsComplexRoleDefinition 对象类继承来的。nsRoleDN 属性包含营销受管理角色和销售经理过滤角色的 DN。前面示例中的用户 Bob 和 Carla 都将成为此新嵌套角色的成员。
此过滤器的范围包括默认范围(该过滤器所在的子树),以及任何 nsRoleScopeDN 属性值下的子树。在本案例中,ManagerFilter 位于 ou=sales,ou=People,dc=example,dc=com 子树中。必须将此子树添加到该范围。