权限

组不仅仅可以用来设置用户的is_*字段,还有2种方法把LDAP的组成员信息转换成Django的权限信息。

最后,这2种方法都需要一种机制在LDAP组和Django组之间建立映射。LDAPGroupType实现了一种算法将LDAP的组信息转换成Django的组信息。用户可以通过继承LDAPGroupType来修改默认的行为。所有的内部实现都把name_attr存入了__init__,并指定了来自LDAP的哪一个参数映射到Django的组名字。默认情况下使用cn参数。

直接使用组

侵入性最小的方法实现组权限映射就是设置AUTH_LDAP_FIND_GROUP_PERMSTrueLDAPBackend将找出所有LDAP用户组并把它们和Django组进行映射,并且为这些组加载相应的权限。你需要自己将组信息和权限相关联,通常使用自带的admin界面。

为了减少与LDAP的链接请求,LDAPBackend可以使用Django的缓存功能存储一份LDAP用户组信息的副本在缓存中。通过设置AUTH_LDAP_CACHE_GROUPSTrue来启用这一特性。也可以设置AUTH_LDAP_GROUP_CACHE_TIMEOUT来控制缓存的超时时间。

AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 300

组镜像

第二种把LDAP组信息转换成Django权限信息的方法就是创建组镜像。如果AUTH_LDAP_MIRROR_GROUPSTrue,则每次用户登录时候LDAPBackend都会使用LDAP组信息来更新数据库。任何不存在的组都将被创建并且Django的组信息将被更新来匹配LDAP的组信息。注意如果LDAP包含组嵌套结构,Django数据库将以扁平化的形式来表示。为了使组镜像生效,你需要把ModelBackend也作为认证方式之一。

这2种方式区别在于,第一种方式每次接收到请求都会去LDAP服务器或缓存进行查询,而第二种则是仅在用户认证时候被更新,这不太适合那种有长链接的网站。

非LDAP用户

LDAPBackend还有一个能力就是管理非认证(authenticate)用户的授权(authorization)。比如你或许使用RemoteUserBackend来映射已经在外部认证的用户到Django用户。通过设置AUTH_LDAP_AUTHORIZE_ALL_USERSLDAPBackend将按照普通的方法映射这些用户到LDAP用户为了提供授权信息。注意这对于AUTH_LDAP_MIRROR_GROUPS是无效的;组镜像是一种认证机制而不是授权机制。

results matching ""

    No results matching ""