操作组
组类型
在LDAP中操作组可能有些棘手,因为他们的种类实在是太多了。我们提供了一个可扩展的API用来操作组并实现了一些常见的类型。LDAPGroupType
是所有子类的基类可以用来为特定的分组机制来确定组成员,下面的4个子类覆盖了几种最常见的分组机制:
- PosixGroupType
- NISGroupType
- MemberDNGroupType
- NestedMemberDNGroupType
posixGroup
和nisNetgroup
有些特殊,所以他们有自己的类。剩下的2种通过组对象来存储一个由其成员DN组成的列表,包括groupOfNames
、groupOfUniqueNames
、Active Directory groups
等等。这种嵌套的结构准许组包含另一个组,你喜欢嵌套多少层都可以。不过为了更清晰以及可读性,我们提供了下面几个子类:
- GroupOfNamesType
- NestedGroupOfNamesType
- GroupOfUniqueNamesType
- NestedGroupOfUniqueNamesType
- ActiveDirectoryGroupType
- NestedActiveDirectoryGroupType
- OrganizationalRoleGroupType
- NestedOrganizationalRoleGroupType
发现组
开始之前,你需要提供一些关于LDAP组的基本信息。AUTH_LDAP_GROUP_SEARCH
是一个LDAPSearch
对象用来识别相关联的组对象。也就是说,我们也许需要知道关于用户都可能属于哪些组的信息(比如嵌套组的情况)。AUTH_LDAP_GROUP_TYPE
是一个组类型的实例,这个类型要和AUTH_LDAP_GROUP_SEARCH
返回的一样。所有其他地方对于组的配置都必须是这个类型并且是搜索结果的一部分。 (这段翻译的有些别扭)
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=groups,dc=example,dc=com",
ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
权限控制
最简单的组应用就是控制哪些组的用户可以登录。如果设置了AUTH_LDAP_REQUIRE_GROUP
那么只有这个组的成员才会登录成功。AUTH_LDAP_DENY_GROUP
正好相反,这个组的用户登录都会被拒绝。
AUTH_LDAP_REQUIRE_GROUP = "cn=enabled,ou=groups,dc=example,dc=com"
AUTH_LDAP_DENY_GROUP = "cn=disabled,ou=groups,dc=example,dc=com"
如果配置了组信息,则可以使用user.ldap_user.group_dns
或user.ldap_user.group_names
来获取用户的组信息。更多信息请看下2章。