>问题
据我所知,django-auth-ldap
正在根据我的配置做我需要的一切。除了它无法建立从 ldap 组到 django 组的映射。
我在ldap中有一个名为dev
的组,即cn=dev
。我在django中也有一个名为dev
的小组。当我在 Django ( uid=fkilibarda
中与我的用户登录时,django-auth-ldap
能够获得我的名字、姓氏和电子邮件,但它无法将我添加到dev
组中。
调试
django_auth_ldap.backend
行:203
def get_group_permissions(self, user, obj=None):
if not hasattr(user, 'ldap_user') and self.settings.AUTHORIZE_ALL_USERS:
_LDAPUser(self, user=user) # This sets user.ldap_user
if hasattr(user, 'ldap_user') and (user.ldap_user.dn is not None):
return user.ldap_user.get_group_permissions()
else:
return set()
我发现hasattr(user, 'ldap_user')
总是假的。因此,user.ldap_user.get_group_permissions()
永远不会运行,这就是从未建立组映射的原因。
我只是不明白上述内容的意义。为什么user
没有ldap_user
属性?
配置
MIDDLEWARE = [
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
AUTHENTICATION_BACKENDS = {
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
}
# ===================
# LDAP configurations
# ===================
AUTH_LDAP_SERVER_URI = "example_server"
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
'ou=group,dc=example,dc=example,dc=com',
ldap.SCOPE_SUBTREE,
'(objectClass=posixGroup)',
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
'is_active': 'cn=dev,ou=group,dc=example,dc=example,dc=com',
'is_staff': 'cn=dev,ou=group,dc=example,dc=example,dc=com',
'is_superuser': 'cn=dev,ou=group,dc=example,dc=example,dc=com',
}
AUTH_LDAP_USER_SEARCH = LDAPSearch(
'ou=people,dc=example,dc=example,dc=com',
ldap.SCOPE_SUBTREE,
'(uid=%(user)s)'
)
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_ALWAYS_UPDATE_USER = True
版本
django-auth-ldap==1.2.14
python3
原来我想念理解django_auth_ldap
是如何工作的。我期望,当AUTH_LDAP_FIND_GROUP_PERMS = True
时,我的用户将根据我在LDAP中的组成员身份被添加到Django中的相应组中。
因此,如果用户fkilibarda
是 LDAP 中 dev
组的成员,那么我认为用户fkilibarda
将自动添加到 Django 中的dev
组中。
相反,对于用户在 Django 中发出的每个请求,django_auth_ldap
都会向 LDAP 发送一个请求,以确定用户应该获得哪个组/权限。这显然是更好的方法...
因此,如果您正在测试以下内容:
- 不要指望用户被添加到 Django 中的组中。
- 在测试此功能时不要使用超级用户,因为超级用户可以访问所有内容。
django_auth_ldap
文档实际上非常清楚地描述了这一点