Django Admin manager for Academia Users with eduPerson schema and SCHAC (SCHema for ACademia).
项目描述
Django admin LDAP manager for Academia OU
Django Admin manager for Academia Users,可使用OpenLDAP服务器配置eduPerson、SCHAC(SCHema for ACademia)和Samba schema。它还需要PPolicy overlay以及以下所述的一些其他schema。
参考
要求
- OpenLDAP 2.4.x
- Python 3.x
- Django 2.x
- django-ldapdb (custom repository)
已在Debian9和Debian 10上测试。
预览
注意:标签和字符串可以使用.gettext进行本地化(.po字典)。请参阅i18n文档
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
注意:playbook将在backups文件夹中备份任何现有的slapd安装。
设置
创建一个虚拟环境和激活它
pip3 install virtualenv
export PROJ_NAME=django-ldap-academia-ou-manager
export DEST_DIR=$PROJ_NAME.env
virtualenv -p python3 $DEST_DIR
source $dest_dir/bin/activate
pip3 install django
安装依赖项
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分支来处理只读(不可编辑)字段。
# pip3 install git+https://github.com/peppelinux/django-ldapdb.git
pip3 install git+https://github.com/peppelinux/django-ldap-academia-ou-manager
编辑settings.py
阅读示例文件夹中的settings.py和settingslocal.py。
在settings.py中执行以下操作
- 在INSTALLED_APPS中添加ldap_peoples;
- 在INSTALLED_APPS中添加rangefilter;
- 如下导入默认的ldap_peoples设置;
- 如下导入默认的应用程序URL;
导入默认的ldap_peoples设置
# 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 上进行更好的面向对象重构来清理;
Django-ldapdb 相关
- 我们使用自定义的 django-ldapdb 分支,因为在官方 django-ldapdb 存储库中,只读字段如 createTimestamps 等在保存时存在错误。 查看相关 PR;
- ListFields 未能正确处理 verbose_name。它依赖于表单类,我们使用自己的分支来避免这个问题;
- 用于评估记录上的最小最大值的聚合查找,这来自 django-ldapdb;
项目详情
关闭
django-ldap-academia-ou-manager-0.9.2.post1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 64be9e44bc490a115d4400ffc0fa27137b9673704e1b99392bf32b842d506583 |
|
MD5 | 56f281371103b186932edbe4d7132025 |
|
BLAKE2b-256 | ea9988d36315321f52590db3fcf1d97e977178bfb2517b1ffb085be7d2c0c646 |