如何对接ldap?同步到django的用户如何具有管理员权限?

【应用背景】

    开发出来的web管理系统登录的时候,需要使用公司个人账户登录,那么就需要对接公司的ldap服务器,对接后想要每个人都有管理员权限。

Django的setting中配置:

import ldap
from django_auth_ldap.config import LDAPGroupQuery
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType

from django.contrib.auth import authenticate


AUTHENTICATION_BACKENDS = (
        'django_auth_ldap.backend.LDAPBackend',
        'django.contrib.auth.backends.ModelBackend',
)

#ldap authentication
AUTH_LDAP_SERVER_URI = 'ldap://:xxx'
#AUTH_LDAP_SERVER_URI = 'ldap://:xxx'
AUTH_LDAP_BIND_DN = 'cn=kangli,ou=,dc=,dc=com'
AUTH_LDAP_BIND_DN = 'xx\\newthink.gen'
AUTH_LDAP_BIND_PASSWORD = "xx.xx"
#AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=Employees,OU=xxUsers,DC=xx,DC=com", ldap.SCOPE_SUBTREE, "(cn=%s)")
AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=Employees,OU=xxUsers,DC=xx,DC=com", ldap.SCOPE_SUBTREE, "(name=%(user)s)")
 

这样对接后用户无法登录,同步过来的用户没有管理员权限

原因是:is_staff=0,手工改成1后 用户就有管理员权限,所以需要代码中自动修改。

方法:

在应用/signals.py中

# 在你的应用的init.py文件中或者任何一个app的apps.py中

from django.dispatch import receiver

from django.db.models.signals import post_save

from django.contrib.auth.models import User

from django_auth_ldap.backend import LDAPBackend

@receiver(post_save, sender=User)

def set_user_staff(sender, instance, created, **kwargs):

    if created:

        instance.is_staff = True    //修改成管理员了

        instance.save()

在aaa的apps.py中

from django.apps import AppConfig

clyappConfig(AppConfig):

    default_auto_field = 'django.db.models.BigAutoField'   //不需要改

    name = 'myapp'   //实际的应用的名字

    def ready(self):

        import aaa.signals   //实际的名字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值