Django管理器,适用于具有eduPerson架构和SCHAC(学术架构)的学术界用户。

django-ldap-academia-ou-manager的Python项目详细描述


学术组织的Django admin LDAP管理器

Django administrator for academic用户,可用于配置eduPerson、SCHAC(学术架构)和Samba模式的OpenLDAP服务器。它还需要PPolicy覆盖和一些其他模式,如下所述。在

参考文献

要求

  • OpenLDAP 2.4.x版
  • Python 3.x版
  • Django 2.x版
  • django ldapdb(自定义存储库)

在Debian9和Debian10上进行了测试。在

预览

Note:标签和字符串可以用.po字典(gettext)本地化。见i18n documentation

Alt textAlt text

LDAP设置

对于需要设置LDAP服务器以供开发或生产使用的用户:

pip3 install ansible
git clone https://github.com/peppelinux/ansible-slapd-eduperson2016.git
cd ansible-slapd-eduperson2016
ansible-playbook -i "localhost," -c local playbook.yml

注意:剧本将在backups文件夹中备份任何现有的slapd安装。在

设置

创建虚拟环境并激活它

^{pr2}$

安装依赖项

apt install python3-dev python3-pip python3-setuptools
apt install libsasl2-dev python-dev libldap2-dev libssl-dev
pip install git+https://github.com/peppelinux/django-ldapdb.git
pip install git+https://github.com/peppelinux/pySSHA-slapd.git
pip install pycountry
pip install git+https://github.com/silentsokolov/django-admin-rangefilter.git
pip install git+https://github.com/peppelinux/django-ldap-academia-ou-manager.git

创建项目

django-admin startproject $PROJ_NAME
cd $PROJ_NAME

安装应用程序

注意:它使用django ldapdb fork来处理只读(不可编辑)字段。在

# pip3 install git+https://github.com/peppelinux/django-ldapdb.git
pip3 install git+https://github.com/peppelinux/django-ldap-academia-ou-manager

编辑设置.py

阅读设置.py以及设置本地.py在示例文件夹中。在

在设置.py执行以下操作:

  • 在已安装的应用程序中添加ldap\'u peoples
  • 在已安装的应用程序中添加rangefilter
  • 导入默认的ldap_用户设置,如下所示:
  • 导入默认应用程序url,如下所示

导入默认的ldap用户设置

# settings.py
if 'ldap_peoples' in INSTALLED_APPS:
    from ldap_peoples.settings import *

导入默认应用程序url

# urls.py
if 'ldap_peoples' in settings.INSTALLED_APPS:
    import ldap_peoples.urls
    urlpatterns += path('', include(ldap_peoples.urls, namespace='ldap_peoples')),

使用对象关系映射器

使用ORM的好处之一是可以进行此类查询 到LDAP数据库。在

用户更新属性

from ldap_peoples.models import LdapAcademiaUser
lu = LdapAcademiaUser.objects.get(uid='mario')

# as multivalue
lu.eduPersonAffiliation.append('alumn')
lu.save()

lu.set_password('secr3tP4ss20rd')

# search into multivalue field
other_lus = LdapAcademiaUser.objects.filter(mail_contains='unical')

用户创建示例

# user creation
import datetime

d = {'cn': 'pedppe',
     'displayName': 'peppde Rossi',
     'eduPersonAffiliation': ['faculty', 'member'],
     'eduPersonEntitlement': ['urn:mace:terena.org:tcs:escience-user',
      'urn:mace:terena.org:tcs:personal-user'],
     'eduPersonOrcid': '',
     'eduPersonPrincipalName': 'grodsfssi@unical',
     'eduPersonScopedAffiliation': ['member@testunical.it', 'staff@testunical.it'],
     'givenName': 'peppe',
     'mail': ['peppe44.grossi@testunical.it', 'pgros44si@edu.testunical.it'],
     'sambaNTPassword': 'a2137530237ad733fdc26d5d7157d43f',
     'schacHomeOrganization': 'testunical.it',
     'schacHomeOrganizationType': ['educationInstitution', 'university'],
     'schacPersonalUniqueID': ['urn:schac:personalUniqueID:IT:CF:CODICEFISCALEpe3245ppe'],
     'schacPlaceOfBirth': '',
     'sn': 'grossi',
     'telephoneNumber': [],
     'uid': 'perrrppe',
     'userPassword': '{SHA512}oMKZtxqeWdXrsHkX5wYBo1cKoQPpmnu2WljngOyQd7GQLR3tsxsUV77aWV/k1x13m2ypytR2JmzAdZDjHYSyBg=='}

u = LdapAcademiaUser.objects.create(**d)
u.delete()

单元测试

./manage.py test ldap_peoples.tests.LdapAcademiaUserTestCase

托多

  • clean方法可以在FormFields和Widgets上使用更好的OOP重构来清理

Django ldapdb相关

  • 我们使用自定义django ldapdb fork,因为像createtimestamp和其他只读字段在正式的django ldapdb repo中保存错误。See related PR
  • ListFields无法正确处理verbose\u name。这取决于窗体类,我们使用fork来避免这种情况
  • 用于计算记录的minmax的聚合查找,这来自django ldapdb

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于限制返回字符串大小的java<bean:write>标记   java将值传递给内部类方法?   数组无法在Java中使用for循环获取所有JSONObject   java中的StringTokenizer需要帮助   java如何在运行时在方法中自动连接类   java通过setter或构造函数分配多个字段   java JPA OneToMany ManyTone   java无法解析类org。贾布拉斯。双矩阵   java如何使用Rest-Assured从以下Json响应获取NetworkID   如果类具有“org”字段,则java@Slf4j生成“无法引用非静态变量org”   swing Java jform前景色未显示   java向kafka事件订阅rest api   java为什么我的数组会出现NullPointerException?   java通过JavaMail从Exchange server读取Zip文件后提取Zip文件的内容   Java中的字符串值舍入   java如何解析单个变量中的每个字符串   带有ListView头的java ListView   java输入流无限循环   java Grails在Spring Boot中的BootStrap#init等价物?