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
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
- 项目
标签: