Zope3: PAU programmatisch anlegen

Programmatisches anlegen eines Pluggable Authentication Utilities (Austauschbares Authentifizierungs-Utility) in Zope3.

by Michael Howitz posted at 2006-04-28 11:20 last modified 2006-04-28 11:20

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