Zope3: PAU programmatisch anlegen
Programmatisches anlegen eines Pluggable Authentication Utilities (Austauschbares Authentifizierungs-Utility) in Zope3.
In Zope3 kann man ohne weiteres über das Web-Interface ein Pluggable Authentication Utility, kurz PAU bzw. in der holprig klingenden deutschen Übersetzung "Austauschbares Authentifizierungs-Utility", hinzufügen. Will man das ganze programmatisch machen ist das auch nicht viel schwerer.
Voraussetzung für die hier folgende Anleitung ist folgende Anleitung: Programmatisch einen Zope3-Ordner in eine Site umwandeln.
Die im Folgenden beschriebene Methode createAuthenticationUtils wird innerhalb des try-finally-Blocks aufgerufen und erhält als Parameter event.object.
from zope.app.security.interfaces import IAuthentication
from zope.app.authentication.interfaces import IAuthenticatorPlugin
from zope.app.appsetup.bootstrap import ensureUtility
from zope.app.authentication.authentication import \
PluggableAuthentication
from zope.app.authentication.principalfolder import PrincipalFolder
from zope.app.authentication.groupfolder import \
GroupFolder, GroupInformation
from zope.app.component import site
from zope.app import zapi
from myproject import config
def addUtilityToPAU(pau, interface, utility_factory, id, name):
u"""Fügt ein Utility zu einem existierenden PAU hinzu.
pau ... PAU, zu dem das Utility hinzugefügt werden soll
interface ... Interface der neuen Komponente
utility_factory ... Klasse der neuen Komponente
id ... Id der Komponente im PAU.
name ... Name unter dem die Komponente (die ja ein Utility ist,
gefunden werden soll.)
"""
utility = utility_factory()
pau[id] = utility
reg_man = pau.registrationManager
reg = site.UtilityRegistration(name, interface, utility)
reg_man.addRegistration(reg)
reg.status = u'Active'
def _addGroupInformation(group_folder, id, title, description):
u"""Fügt einem Gruppenordner eine Gruppe hinzu.
group_folder ... Objekt des Gruppenordners
id ... Id der Gruppe
title ... title für die Gruppe
description ... Beschreibung für die Gruppe.
"""
group = GroupInformation()
group.title = title
group.description = description
group_folder[id] = group
def createAuthenticationUtils(obj):
u"""Erstellung des PAU und der darin liegenden Objekte.
obj ... Objekt, welches ISite implementiert, in dem PAU
installiert werden soll
"""
# PAU erstellen
ensureUtility(obj, IAuthentication, '', PluggableAuthentication,
copy_to_zlog=False)
auth = zapi.getUtility(IAuthentication)
# Anmeldung geschieht über Sitzungsdaten, weitere Anmeldearten sind
# in Zope3 schon implementiert, dazu in zope/app/authentication in den
# *.zcml Dateien nach 'provides=".interfaces.ICredentialsPlugin"' suchen
# der Eintrag unter name= des zugehörigen Utilities ist auch als
# Anmeldeart möglich.
auth.credentialsPlugins = (u'Session Credentials',)
# Hinzufügen eines Ordners, der die Daten der Nutzungsberechtigenen
# (Principals) enthalten wird (deutsch: "Ordner über
# Nutzungsberechtigten")
addUtilityToPAU(auth, IAuthenticatorPlugin, PrincipalFolder,
'principal_folder', u'Benutzerverwaltung')
# Hinzufügen eines Gruppenordners, der die Zuordnung der
# Nutzungsberechtigten zu Gruppen speichert
addUtilityToPAU(auth, IAuthenticatorPlugin, GroupFolder,
'group_folder', u'Gruppenverwaltung')
# Festlegen, welche der angelegten Ordner für die Authentifizierung
# verwendet werden
auth.authenticatorPlugins = (u'Benutzerverwaltung',
u'Gruppenverwaltung',)
# Anlegen der Gruppen
group_folder = auth['group_folder']
for group in config.groups:
_addGroupInformation(group_folder, group['id'],
group['title'], group['description'])
In myproject/config.py stehen die anzulegenden Gruppen:
groups = [{'id': 'management',
'title': 'Management',
'description': 'Management der Firma XY'},
]
- Category(s)
- Zope 3
- The URL to Trackback this entry is:
- http://blog.gocept.com/zope3-pau-programmatisch-anlegen/tbping