跳转到主要内容

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文档

Alt text Alt 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

注意: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;

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

支持