操作组

组类型

在LDAP中操作组可能有些棘手,因为他们的种类实在是太多了。我们提供了一个可扩展的API用来操作组并实现了一些常见的类型。LDAPGroupType是所有子类的基类可以用来为特定的分组机制来确定组成员,下面的4个子类覆盖了几种最常见的分组机制:

  • PosixGroupType
  • NISGroupType
  • MemberDNGroupType
  • NestedMemberDNGroupType

posixGroupnisNetgroup有些特殊,所以他们有自己的类。剩下的2种通过组对象来存储一个由其成员DN组成的列表,包括groupOfNamesgroupOfUniqueNamesActive 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_dnsuser.ldap_user.group_names来获取用户的组信息。更多信息请看下2章。

results matching ""

    No results matching ""